Obtenir-ÉlémentEnfant: Liste des fichiers et dossiers avec PowerShell

Souvenez-vous du bon vieux temps de la commande DOS dir ? Et que dire de la commande Linux ls ? Si c’est le cas, Get-childItem est essentiellement la même chose, mais en mieux.

En fait, nous avons même dir et ls dans PowerShell sous forme d’alias. La cmdlet PowerShell Get-Childitem peut non seulement répertorier les fichiers et dossiers sur un système de fichiers via la console PowerShell ou un script PowerShell, mais peut également énumérer les clés et valeurs du registre, les certificats dans différents magasins de certificats et même Active Directory, pour n’en citer que quelques-uns.

Si vous êtes un scripteur PowerShell débutant ou intermédiaire, n’oubliez pas de consulter mon mini-cours GRATUIT sur la création d’un outil PowerShell ! Plus de 9 000 mots d’explications approfondies et d’informations sur la création d’un outil PowerShell.

Pour comprendre Get-Childitem, pensez d’abord à dir et ls, mais au lieu de traiter uniquement les fichiers, il traite de nombreux objets en tant qu’éléments enfants et les énumère. Vous pouvez utiliser l’alias ou le nom complet de la commande pour l’utiliser.

Étant donné que cette commande est disponible depuis PowerShell v1, vous pouvez être sûr qu’elle fonctionnera avec votre version de PowerShell.

Get-ChildItem parcourt un arbre

A file system is a hierarchy. It has a folder structure with files inside of folders and those folders inside of other folders. A file system is like a tree. That tree has a trunk (C:\ for example) and “branches” coming off of it (folders). In fact, we even have a tree command.

PS> tree
Folder PATH listing for volume HD
Volume serial number is 0000007B 22DC:666C
C:.
 \modules
   \AdsiPS
     \1.0.0.2
       \Public
       \AWSPowerShell
<SNIP>

Vous pouvez utiliser cette commande sur des chemins locaux sur l’ordinateur local, utiliser un scriptblock distant PowerShell et utiliser Get-ChildItem à l’intérieur de celui-ci ou simplement l’utiliser sur un chemin UNC. Tout fonctionne de la même manière. Peut-être que je veux simplement répertorier tous les fichiers du répertoire actuel.

PS> dir -Path .
PS> Invoke-Command -ComputerName SERVER1 -Scriptblock { dir -Path . }

Fournisseurs PowerShell

Microsoft a réalisé que naviguer dans cette structure en forme d' »arbre » d’un système de fichiers pouvait également être appliqué à d’autres systèmes. Un système de fichiers en « arborescence » comporte des dossiers et des fichiers, mais un registre comporte des clés et des valeurs, tandis que le système de certificats dans Windows comporte des magasins et des certificats à l’intérieur de ces magasins. Chacune de ces zones spécifiques peut être représentée comme un arbre, c’est ainsi que le fournisseur PowerShell a vu le jour. Pourquoi tout ce discours sur les fournisseurs PowerShell ? Parce que la cmdlet Get-ChilldItem fait partie des cmdlets *-Item qui interagissent avec les lecteurs PowerShell exposés par chaque fournisseur.

La cmdlet Get-ChildItem peut produire un nombre quelconque d’objets sur un lecteur PowerShell et vous permet de traiter chaque élément via le pipeline ou peut-être dans une boucle foreach PowerShell. Elle comprend le concept de lecteur PowerShell, ce qui vous permet de spécifier un Chemin d’un dossier de système de fichiers, d’une clé de registre ou d’un magasin de certificats, le tout en un seul.

Vous pouvez voir ci-dessous que cette commande peut énumérer le dossier C:\, la ruche HKEY Current User ainsi que le magasin de certificats PowerShell.

PS> Get-ChildItem -Path C:\


    Directory: C:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         7/2/2017   7:01 AM                AppData
d-----        4/25/2017   4:36 PM                CheckPoint

PS> Get-ChildItem -Path HKCU:\


    Hive: HKEY_CURRENT_USER


Name                           Property
----                           --------
BCD00000000

PS> dir -Path Cert:\


Location   : CurrentUser
StoreNames : {TrustedPublisher, ClientAuthIssuer, Root, UserDS...}

Filtrage

La commande PowerShell Get-ChildItem ne peut pas seulement extraire tous les objets d’un lecteur, mais peut également filtrer les informations à l’aide de plusieurs paramètres différents : Filter, Include et Exclude. Vous voudrez toujours utiliser le paramètre PowerShell Filter omniprésent lorsque cela est possible. Ce paramètre transmet directement la syntaxe du filtre au fournisseur individuel. Bien que beaucoup plus rapide, cette syntaxe dépend uniquement du fournisseur interrogé.

Par exemple, une syntaxe de Filter telle que Name -eq 'foo' peut être tout à fait acceptable lors de la recherche de fichiers mais ne fonctionnera pas du tout lors de la recherche dans le registre car le fournisseur de registre n’a même pas de filtre!

PS> dir HKLM:\ -Filter "Name -eq 'foo'"
ls : Cannot call method. The provider does not support the use of filters.
At line:1 char:1 + ls HKLM:\ -Filter "Name -eq 'foo'" +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     + CategoryInfo          :
NotImplemented: (:) [Get-ChildItem], PSNotSupportedException     +
FullyQualifiedErrorId :
NotSupported,Microsoft.PowerShell.Commands.GetChildItemCommand

Cependant, en cas d’échec, vous disposez toujours des paramètres Include et Exclude également.

Cette commande PowerShell comporte également quelques paramètres spécifiques au système de fichiers tels que Force qui affichera les fichiers et dossiers cachés, File et Directory qui ne trouvent que des fichiers ou des dossiers. Consultez la description complète de Get-ChildItem via Get-Help ou dans la documentation Microsoft.

Une autre chose intéressante à propos de Get-ChildItem est sa capacité à résoudre les chemins lors de l’utilisation du caractère générique. En PowerShell, le caractère générique représente généralement n’importe quoi. Par exemple, si vous souhaitez voir tous les fichiers avec l’extension de fichier .txt, il vous suffit de spécifier le chemin d’accès au dossier et *.txt.

PS> Get-ChildItem -Path 'C:\*.txt'

Nous pourrions également filtrer sur les attributs des fichiers. Peut-être voulons-nous simplement trouver uniquement les fichiers en lecture seule dans un dossier.

PS> Get-ChildItem -Path C:\ -Attributes R -File

Résumé

Cette commande PowerShell est l’une de ces cmdlets que vous utiliserez souvent. La plupart du temps, vous utiliserez probablement le fournisseur FileSystem, mais il est important de se rappeler que cette cmdlet est capable de bien plus encore. Utilisez-la pour interroger des fichiers, des dossiers, des clés de registre, des valeurs de registre, des certificats, des utilisateurs de l’Active Directory, des ordinateurs ou même des variables d’environnement, des fonctions et plus encore!

En cas de doute, exécutez la commande Get-PSDrive pour voir la liste de tous les lecteurs PowerShell chargés que Get-ChildItem peut interroger pour vous.

Source:
https://adamtheautomator.com/get-childitem/