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