Get-ChildItem: Dateien und Ordner mit PowerShell auflisten

Erinnern Sie sich an die guten alten Zeiten des DOS-Befehls dir? Wie sieht es mit dem Linux-Befehl ls aus? Falls ja, ist das Get-ChildItem im Grunde genommen das Gleiche, jedoch auf ein höheres Niveau gebracht.

Tatsächlich haben wir sogar dir und ls in PowerShell in Form eines Alias. Das Get-ChildItem PowerShell-Cmdlet kann nicht nur Dateien und Ordner in einem Dateisystem über die PowerShell-Konsole oder PowerShell Skript auflisten, sondern auch Registrierungsschlüssel und -werte, Zertifikate in verschiedenen Zertifikatsspeichern und sogar Active Directory, um nur einige zu nennen.

Wenn Sie ein Anfänger/fortgeschrittener PowerShell-Skripter sind, sollten Sie unbedingt meinen KOSTENLOSEN Mini-Kurs zum Erstellen eines PowerShell-Tools ausprobieren! 9.000+ Wörter tiefgehende Erklärungen und Einblicke, wie man ein PowerShell-Tool erstellt.

Um Get-ChildItem zu verstehen, denken Sie zuerst daran im Hinblick auf dir und ls, aber anstelle von nur Dateien behandelt es viele Objekte als untergeordnetes Element und zählt sie auf. Sie können den Alias oder den vollständigen Befehlsnamen verwenden, um ihn zu verwenden.

Da dieser Befehl seit PowerShell v1 verfügbar ist, können Sie sicher sein, dass er mit Ihrer PowerShell-Version funktioniert.

Get-ChildItem durchläuft einen Baum

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>

Sie können diesen Befehl auf lokale Pfade auf dem lokalen Computer zeigen lassen, einen PowerShell-Remoteskriptblock verwenden und Get-ChildItem darin verwenden oder ihn einfach auf einen UNC-Pfad richten. Alle funktionieren gleich. Vielleicht möchte ich nur alle Dateien im aktuellen Verzeichnis auflisten.

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

PowerShell-Provider

Microsoft erkannte, dass diese „Baum“-Struktur eines Dateisystems auch auf andere Systeme angewendet werden konnte. Ein Dateisystem „Baum“ hat Ordner und Dateien, aber eine Registry hat Schlüssel und Werte, während das Zertifikatsystem in Windows Speicher und Zertifikate innerhalb dieser Speicher hat. Jeder dieser spezifischen Bereiche kann als Baum dargestellt werden, daher wurde der PowerShell-Anbieter geboren. Warum diese ganze Rede über PowerShell-Anbieter? Weil das Get-ChildItem-Cmdlet Teil der *-Item-Cmdlets ist, die mit den PowerShell-Laufwerken interagieren, die jeder Anbieter bereitstellt.

Das Get-ChildItem-Cmdlet kann beliebig viele Objekte auf einem PowerShell-Laufwerk ausgeben und ermöglicht es Ihnen, jedes Element über die Pipeline oder vielleicht in einer PowerShell-Schleife, wie foreach, zu verarbeiten. Es versteht das Konzept eines PowerShell-Laufwerks, was es Ihnen ermöglicht, einen Path für einen Dateisystemordner, einen Registry-Schlüssel oder einen Zertifikatsspeicher in einem zu spezifizieren.

Sie können unten sehen, dass dieser Befehl den C:\-Ordner, den HKEY Current User-Hive sowie den PowerShell-Zertifikatsspeicher aufzählen kann.

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...}

Filtern

Die PowerShell-Befehl Get-ChildItem kann nicht nur alle Objekte auf einem Laufwerk abrufen, sondern auch Informationen durch verschiedene Parameter filtern: Filter, Include und Exclude. Es ist immer ratsam, den allgegenwärtigen PowerShell-Filter-Parameter zu verwenden, wenn möglich. Dieser Parameter gibt die Filter-Syntax direkt an den einzelnen Anbieter weiter. Obwohl dies viel schneller ist, hängt diese Syntax ausschließlich vom abgefragten Anbieter ab.

Zum Beispiel kann eine Filter-Syntax von Name -eq 'foo' beim Abfragen von Dateien durchaus in Ordnung sein, funktioniert jedoch überhaupt nicht, wenn Sie das Register abfragen, weil der Registrierungsanbieter überhaupt keinen Filter hat!

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

Wenn jedoch alles andere fehlschlägt, haben Sie immer noch die Parameter Include und Exclude zur Verfügung.

Dieser Befehl in PowerShell hat auch einige dateisystemspezifische Parameter wie Force, der ausgeblendete Dateien und Ordner ausgibt, File und Directory, die nur Dateien oder Ordner finden. Werfen Sie einen Blick auf die vollständige Aufschlüsselung von Get-ChildItem über Get-Help oder in den Microsoft-Dokumenten.

Eine weitere coole Sache an Get-ChildItem ist seine Fähigkeit, Pfade aufzulösen, wenn Sie das Platzhalterzeichen verwenden. In PowerShell repräsentiert das Platzhalterzeichen normalerweise alles. Wenn Sie beispielsweise alle Dateien mit der .txt-Dateierweiterung sehen möchten, geben Sie einfach den Pfad zum Ordner und *.txt an.

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

Wir könnten auch nach Dateiattributen filtern. Vielleicht möchten wir nur die schreibgeschützten Dateien in einem Ordner finden.

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

Zusammenfassung

Dieser PowerShell-Befehl ist einer dieser Befehle, den Sie wiederholt verwenden werden. Die meiste Zeit verwenden Sie wahrscheinlich den FileSystem-Anbieter, aber es ist wichtig zu bedenken, dass dieser Befehl zu viel mehr fähig ist. Verwenden Sie ihn, um Dateien, Ordner, Registrierungsschlüssel, Registrierungswerte, Zertifikate, Active Directory-Benutzer, Computer oder sogar Umgebungsvariablen, Funktionen und mehr abzufragen!

Bei Unsicherheiten führen Sie den Befehl Get-PSDrive aus, um eine Liste aller geladenen PowerShell-Laufwerke zu sehen, die Get-ChildItem für Sie abfragen kann.

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