Verwenden des Cmdlet \"Get-ChildItem\"

Nachbilden (und Erweitern) des DIR-Befehls

In seiner grundlegenden Form bietet das Cmdlet Get-ChildItem eine ähnliche Funktionalität wie der Befehl dir. Wenn Sie beispielsweise an der Eingabeaufforderung von Windows PowerShell einfach Get-ChildItem eingeben, erhalten Sie Informationen über die Objekte an der aktuellen Position zurück:

Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Documents and Settings\kenmyer

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----          3/1/2006   9:03 AM            Bluetooth Software
d---s         5/10/2006   8:55 AM            Cookies
d----          5/9/2006   2:09 PM            Desktop
d-r--          5/9/2006   8:22 AM            Favorites
d-r--          5/9/2006   2:24 PM            My Documents
d-r--          3/1/2006   8:15 AM            Start Menu
d---s          3/1/2006   3:41 PM            UserData
d----         3/16/2006   3:29 PM            WINDOWS

Das alles ist schon nicht schlecht, aber Sie können mit Get-ChildItem sehr viel mehr, als einfach nur die Elemente an der aktuellen Position aufzulisten. So haben Sie in der oben gezeigten Ausgabe vielleicht bemerkt, dass es nicht sehr viel zu sehen gab, weil die aktuelle Position ein Ordner war, der nur ein paar Unterordner enthielt. Möglicherweise hätten Sie es deshalb praktischer gefunden, wenn Get-ChildItem nicht nur die Namen dieser Unterordner zurückgegeben hätte, sondern auch deren Inhalt; wenn Sie also eine Liste aller in den Unterordnern enthaltenen Dateien und Ordner erhalten hätten. Aber das ist ganz einfach. Sie müssen nur den Parameter –recurse hinzufügen:

Get-ChildItem -recurse

Natürlich sind Sie bei der Arbeit nicht auf die aktuelle Position beschränkt. Sie sind nicht einmal nur auf Dateien und Ordner beschränkt. Wollen Sie eine Liste aller Ihrer Umgebungsvariablen anzeigen? Dann übergeben Sie einfach den Pfad zum "Laufwerk" der Umgebungsvariablen, etwa wie folgt:

Get-ChildItem env:

Und was ist mit allen Registrierungsunterschlüsseln in "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"? Warum nicht:

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Hinweis Get-ChildItem kann nicht verwendet werden, um die in einem Unterschlüssel enthaltenen Registrierungswerte abzufragen. Dazu benötigen Sie das Cmdlet Get-ItemProperty.

So könnten wir den ganzen Tag weitermachen. Beispielsweise ist es mit den Parametern –include und –exclude möglich, bestimmte Elemente an einer bestimmten Position abzufragen. Angenommen, Sie benötigen Informationen nur über die TXT- und LOG-Dateien im Ordner "C:\Scripts". Das ist ganz einfach:

Get-ChildItem c:\scripts\*.* -include *.txt,*.log

Wie Sie sehen, suchen wir nach allen Dateien (*.*) im Ordner "C:\Scripts". Dazu geben wir den Parameter -include und zwei Dateitypen an: "*.txt" und "*.log". (Die Dateitypen werden durch ein Komma voneinander getrennt.) Und wie sieht das Ergebnis aus? Wir erhalten nur TXT- und LOG-Dateien zurück:

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          4/6/2006   8:28 PM       3508 950.Log
-a---          5/6/2006  10:06 AM          0 Employees.txt
-a---          5/6/2006  10:06 AM          0 Employees_NODUPL.txt
-a---          5/6/2006  10:06 AM          0 ExcelData.txt
-a---          3/3/2006   9:24 PM      14894 methods.txt
-a---         4/28/2006   1:36 PM         41 new_name.txt
-a---          3/7/2006   1:44 PM       4112 read-write.txt
-a---         4/11/2006  11:04 AM         18 servers.txt
-a---          5/5/2006   9:09 PM      53358 tee.txt
-a---         4/26/2006  12:28 PM       1125 temporary_print_file.txt
-a---          5/6/2006  10:30 PM      34184 test.log
-a---          5/9/2006   3:17 PM         58 test.txt
-a---          4/6/2006  10:26 PM        205 test_NODUPL.txt
-a---         4/28/2006   1:16 PM         27 x.txt
-a---          5/8/2006   2:39 PM         25 y.txt

Hätten wir alles erhalten wollen außer TXT- und LOG-Dateien, hätten wir stattdessen einfach den Parameter –exclude angegeben. Dieser Parameter teilt Windows PowerShell mit, welche Elemente nicht in der zurückgegebenen Datenmenge enthalten sein sollen. Und so sieht der Befehl aus:

Get-ChildItem c:\scripts\*.* -exclude *.txt,*.log

Probieren Sie es aus und beobachten Sie, was passiert.

Die von Get-Children zurückgegebenen Informationen können auch an das Cmdlet Sort-Object weitergereicht werden, um damit die Daten nach einem anderen Format zu sortieren. Wollen Sie die Dateien lieber nach der Größe (Länge) als nach dem Namen sortiert anzeigen? Dann verwenden Sie den folgenden Befehl:

Get-ChildItem c:\scripts\*.* | Sort-Object length

Soll Ihre Ausgabe dagegen eher mit den größten Dateien beginnen und mit den kleinsten Dateien enden, fügen Sie den Parameter –descending hinzu:

Get-ChildItem c:\scripts\*.* | Sort-Object length -descending

Aliase für "Get-ChildItem"

  • gci

  • ls

  • dir