Windows PowerShell utilise le substantif Item pour faire référence aux éléments situés sur un lecteur Windows PowerShell. Avec le fournisseur FileSystem de Windows PowerShell, un Item peut être un fichier, un dossier ou le lecteur Windows PowerShell. Répertorier et utiliser ces éléments est une tâche de base essentielle dans la plupart des paramètres administratifs, c'est pourquoi nous souhaitons discuter de ces tâches en détail.
Énumération de fichiers, dossiers et clés de Registre (Get-ChildItem)
L'obtention d'une collection d'éléments d'un emplacement particulier étant une tâche particulièrement courante, l'applet de commande Get-ChildItem est conçue spécifiquement pour retourner tous les éléments situés dans un conteneur tel qu'un dossier.
Si vous souhaitez retourner tous les fichiers et dossiers contenus directement dans le dossier C:\Windows, tapez :
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-16 8:10 AM 0 0.log -a--- 2005-11-29 3:16 PM 97 acc1.txt -a--- 2005-10-23 11:21 PM 3848 actsetup.log ...
La liste est similaire à celle que vous obtenez en entrant la commande dir dans Cmd.exe ou la commande ls dans un interpréteur de commandes UNIX.
Vous pouvez effectuer des listages très complexes en utilisant les paramètres de l'applet de commande Get-ChildItem. Nous examinerons quelques scénarios par la suite. Vous pouvez consulter la syntaxe de l'applet de commande Get-ChildItem en tapant :
PS> Get-Command -Name Get-ChildItem -Syntax
Ces paramètres peuvent être combinés et mis en correspondance pour obtenir une sortie très personnalisée.
Listage de tous les éléments contenus (-Recurse)
Pour voir à la fois les éléments d'un dossier Windows et tous les éléments contenus dans les sous-dossiers, utilisez le paramètre Recurse de Get-ChildItem. La liste affiche tous les éléments du dossier Windows et de ses sous-dossiers. Par exemple :
PS> Get-ChildItem -Path C:\WINDOWS -Recurse Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll ...
Filtrage d'éléments par nom (-Name)
Pour afficher uniquement les noms d'éléments, utilisez le paramètre Name de Get-Childitem :
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly ...
Listage forcé des éléments masqués (-Force)
Les éléments qui sont normalement invisibles dans l'Explorateur Windows ou Cmd.exe n'apparaissent pas dans la sortie d'une commande Get-ChildItem . Pour afficher les éléments masqués, utilisez le paramètre Force de Get-ChildItem. Par exemple :
Get-ChildItem -Path C:\Windows -Force
Ce paramètre est nommé Force parce que vous pouvez remplacer de force le comportement normal de la commande Get-ChildItem. Force est un paramètre largement utilisé qui force une action qu'une applet de commande n'exécuterait pas normalement, à l'exception des actions susceptibles de compromettre la sécurité du système.
Mise en correspondance de noms d'éléments avec des caractères génériques
La commande The Get-ChildItem accepte les caractères génériques dans le chemin d'accès aux éléments à lister.
Parce que la concordance par caractères génériques est contrôlée par le moteur Windows PowerShell, toutes les applets de commande qui acceptent des caractères génériques utilisent la même notation et présentent le même comportement de mise en correspondance. La notation générique de Windows PowerShell inclut :
-
l'astérisque (*), qui fait correspondre zéro ou plusieurs occurrences de tout caractère ;
-
le point d'interrogation (?), qui correspond exactement à un caractère ;
-
Les caractères crochet gauche ([) et crochet droit (]), qui encadrent un jeu de caractères à mettre en correspondance.
Voici quelques exemples qui illustrent le fonctionnement de la spécification de caractères génériques.
Pour rechercher tous les fichiers du répertoire Windows portant l'extension .log et dont le nom de base compte exactement cinq caractères, entrez la commande suivante :
PS> Get-ChildItem -Path C:\Windows\?????.log Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- ... -a--- 2006-05-11 6:31 PM 204276 ocgen.log -a--- 2006-05-11 6:31 PM 22365 ocmsn.log ... -a--- 2005-11-11 4:55 AM 64 setup.log -a--- 2005-12-15 2:24 PM 17719 VxSDM.log ...
Pour rechercher tous les fichiers dont le nom commence par la lettre x dans le répertoire Windows, tapez :
Get-ChildItem -Path C:\Windows\x*
Pour rechercher tous les fichiers dont le nom commence par x ou z, tapez :
Get-ChildItem -Path C:\Windows\[xz]*
Exclusion d'éléments (-Exclude)
Vous pouvez exclure des éléments spécifiques à l'aide du paramètre Exclude de Get-ChildItem. Cela vous permet d'exécuter un filtrage complexe en une seule instruction.
Par exemple, supposez que vous essayez de rechercher la DLL du service de temps Windows dans le dossier System32, et que tout ce dont vous vous souvenez du nom de la DLL est qu'il commence par « W » et contient « 32 ».
Une expression telle que w*32*.dll recherchera toutes les DLL qui satisfont ces conditions, mais peut aussi retourner toutes les DLL de compatibilité Windows 95 et Windows 16 bits qui incluent « 95 » ou « 16 » dans leur nom. Vous pouvez omettre les fichiers dont le nom contient ces nombres en utilisant le paramètre Exclude avec le modèle *[9516]* :
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude *[9516]*
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 174592 w32time.dll
-a--- 2004-08-04 8:00 AM 22016 w32topl.dll
-a--- 2004-08-04 8:00 AM 101888 win32spl.dll
-a--- 2004-08-04 8:00 AM 172032 wldap32.dll
-a--- 2004-08-04 8:00 AM 264192 wow32.dll
-a--- 2004-08-04 8:00 AM 82944 ws2_32.dll
-a--- 2004-08-04 8:00 AM 42496 wsnmp32.dll
-a--- 2004-08-04 8:00 AM 22528 wsock32.dll
-a--- 2004-08-04 8:00 AM 18432 wtsapi32.dll
Combinaison de paramètres de Get-ChildItem
Vous pouvez utiliser plusieurs paramètres de l'applet de commande Get-ChildItem dans la même commande. Avant de combiner des paramètres, soyez sûr de bien comprendre la concordance par caractères génériques. Par exemple, la commande suivante ne retourne aucun résultat :
PS> Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
Il n'y a pas de résultats, bien qu'il y ait deux DLL dont le nom commence par la lettre « z » dans le dossier Windows.
Aucun résultat n'a été retourné parce que nous avons spécifié le caractère générique dans le cadre du chemin d'accès. La commande était récursive, mais l'applet de commande Get-ChildItem a limité les éléments à ceux du dossier Windows dont le nom se termine par « .dll ».
Pour spécifier une recherche récursive des fichiers dont le nom correspond à un modèle spécial, utilisez le paramètre -Include.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 8261 zoneoc.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 337920 zipfldr.dll