Utilisation de fichiers, de dossiers et de clés de Registre
Cet exemple s’applique uniquement aux plateformes Windows.
PowerShell utilise le substantif Item pour faire référence aux éléments figurant sur un lecteur PowerShell. En relation avec le fournisseur FileSystem de PowerShell, le terme Item peut désigner un fichier, un dossier ou le lecteur PowerShell. Nous allons examiner en détail comment répertorier et utiliser ces éléments, ces tâches étant essentielles dans la plupart des environnements d'administration.
Énumération de fichiers, dossiers et clés de Registre
L’obtention d’une collection d’éléments à partir d’un emplacement particulier étant une tâche très courante, l’applet de commande Get-ChildItem
est conçue pour retourner tous les éléments figurant dans un conteneur tel qu’un dossier.
Pour retourner tous les fichiers et dossiers contenus directement dans le dossier C:\Windows
, tapez ce qui suit :
PS> Get-ChildItem -Path C:\Windows
Directory: Microsoft.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 ressemble à celle qui s’affiche quand vous entrez la commande dir
dans cmd.exe
, ou la commande ls
dans un interpréteur de commandes UNIX.
Vous pouvez effectuer des recherches complexes à l’aide des paramètres de l’applet de commande Get-ChildItem
. Pour voir la syntaxe de l’applet de commande Get-ChildItem
, tapez ce qui suit :
Get-Command -Name Get-ChildItem -Syntax
Vous pouvez combiner ces paramètres pour personnaliser davantage les sorties.
Affichage de la liste de tous les éléments contenus
Pour voir à la fois les éléments d’un dossier Windows et ceux contenus dans ses sous-dossiers, utilisez le paramètre Recurse de l’applet de commande Get-ChildItem
. La liste affiche tous les éléments contenus dans le dossier Windows et ses sous-dossiers. Par exemple :
PS> Get-ChildItem -Path C:\WINDOWS -Recurse
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll
...
Filtrage des éléments par nom
Pour voir uniquement les noms des éléments, utilisez le paramètre Name de l’applet de commande Get-Childitem
:
PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...
Affichage forcé de la liste des éléments cachés
Les éléments masqués dans l’Explorateur de fichiers ou dans cmd.exe
ne figurent pas dans la sortie d’une commande Get-ChildItem
. Pour voir 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, car il permet de remplacer de force le comportement habituel de la commande Get-ChildItem
. Force est un paramètre couramment employé qui force une action dont l’exécution n’est généralement pas assurée par une applet de commande. Notez toutefois qu’il n’exécute aucune action susceptible de compromettre la sécurité du système.
Recherche de noms d’éléments avec des caractères génériques
La commande Get-ChildItem
accepte les caractères génériques dans le chemin des éléments à lister.
La mise en correspondance des caractères génériques étant gérée par le moteur PowerShell, toutes les applets de commande qui acceptent des caractères génériques utilisent la même notation et suivent le même comportement de mise en correspondance. Parmi les caractères génériques disponibles dans la notation PowerShell, citons les suivants :
- L’astérisque (
*
) correspond à zéro ou plusieurs occurrences d’un caractère quelconque. - Le point d’interrogation (
?
) correspond à exactement un caractère. - Le crochet gauche (
[
) et le crochet droit (]
) entourent un ensemble de caractères à mettre en correspondance.
Voici quelques exemples qui illustrent l'utilisation des caractères génériques.
Pour trouver tous les fichiers contenus dans le répertoire Windows avec le suffixe .log
et exactement cinq caractères dans le nom de base, entrez la commande suivante :
PS> Get-ChildItem -Path C:\Windows\?????.log
Directory: Microsoft.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 qui commencent par la lettre x
dans le répertoire Windows, tapez ce qui suit :
Get-ChildItem -Path C:\Windows\x*
Pour rechercher tous les fichiers dont le nom commence par x ou z, tapez ce qui suit :
Get-ChildItem -Path C:\Windows\[xz]*
Pour plus d’informations sur les caractères génériques, consultez À propos des caractères génériques.
Exclusion d’éléments
Vous pouvez exclure des éléments spécifiques à l’aide du paramètre Exclude de l’applet de commande Get-ChildItem
. Vous pouvez ainsi effectuer des opérations de filtrage complexes à l'aide d'une seule instruction.
Par exemple, supposons que vous essayiez de trouver la DLL Windows Time Service dans le dossier System32. Tout ce dont vous vous souvenez, c’est que le nom de la DLL commence par la lettre « W » et qu’il contient le nombre « 32 ».
Une expression comme w*32*.dll
recherchera toutes les DLL qui répondent aux critères. Toutefois, vous pouvez affiner le filtrage des fichiers pour omettre les fichiers Win32. Vous pouvez omettre ces fichiers à l’aide du paramètre Exclude en suivant le modèle win*
:
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*
Directory: C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 3/18/2019 9:43 PM 495616 w32time.dll
-a--- 3/18/2019 9:44 PM 35328 w32topl.dll
-a--- 1/24/2020 5:44 PM 401920 Wldap32.dll
-a--- 10/10/2019 5:40 PM 442704 ws2_32.dll
-a--- 3/18/2019 9:44 PM 66048 wsnmp32.dll
-a--- 3/18/2019 9:44 PM 18944 wsock32.dll
-a--- 3/18/2019 9:44 PM 64792 wtsapi32.dll
Combinaison de paramètres 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, assurez-vous de bien comprendre à quoi correspondent les caractères génériques. Par exemple, la commande suivante ne retourne aucun résultat :
Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
Aucun résultat n'est disponible, même s'il existe deux DLL qui commencent par la lettre « z » dans le dossier Windows.
Aucun résultat n'est retourné, car nous avons spécifié le caractère générique comme faisant partie du chemin d'accès. Même si la commande est récursive, l’applet de commande Get-ChildItem
limite les résultats aux éléments qui se trouvent dans le dossier Windows et dont le nom se termine par .dll
.
Pour spécifier une recherche récursive des fichiers dont le nom correspond à un modèle particulier, utilisez le paramètre Include.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 8261 zoneoc.dll
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 337920 zipfldr.dll