In Windows PowerShell wird das Substantiv Item für Elemente auf Windows PowerShell-Laufwerken verwendet. Wenn Sie den Windows PowerShell-Dateisystemanbieter verwenden, kann mit Item eine Datei, ein Ordner oder das Windows PowerShell-Laufwerk bezeichnet werden. Das Auflisten und Bearbeiten dieser Elemente ist eine der wichtigsten Aufgaben für Verwaltungseinstellungen, daher werden diese Aufgaben hier genauer beschrieben.
Auflisten von Dateien, Ordnern und Registrierungsschlüsseln (Get-ChildItem)
Da das Abrufen einer Elementliste von einem bestimmten Speicherort eine häufig ausgeführte Aufgabe darstellt, wurde das Cmdlet Get-ChildItem speziell für die Rückgabe alle Elemente in einem Container, z. B. einem Ordner, entwickelt.
Wenn Sie alle Dateien und Ordner zurückgeben möchten, die direkt im Ordner "C:\Windows" enthalten sind, geben Sie Folgendes ein:
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows 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 ...
Die Auflistung ähnelt der beim Eingeben des Befehls dir in Cmd.exe oder des Befehls ls in einer UNIX-Befehlsshell.
Mit den Parametern des Cmdlet Get-ChildItem können Sie sehr komplexe Auflistungen erstellen. Im Folgenden finden Sie einige Szenarios. Die Syntax des Cmdlet Get-ChildItem zeigen Sie folgendermaßen an:
PS> Get-Command -Name Get-ChildItem -Syntax
Diese Parameter können zusammen verwendet und angepasst werden, um eine angepasste Ausgabe zu erhalten.
Auflisten aller enthaltenen Elemente ("-Recurse")
Zum Anzeigen der Elemente in einem Windows-Ordner sowie der Elemente in den Unterordnern verwenden Sie den Recurse -Parameter von Get-ChildItem. In der Liste werden alle Elemente in dem Windows-Ordner und in den Unterordnern angezeigt. Beispiel:
PS> Get-ChildItem -Path C:\WINDOWS -Recurse Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll ...
Filtern von Elementen nach dem Namen ("-Name")
Wenn Sie nur die Namen von Elementen anzeigen möchten, verwenden Sie den Name -Parameter von Get-Childitem:
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly ...
Erzwingen der Auflistung ausgeblendeter Elemente ("-Force")
Elemente, die in Windows Explorer und "Cmd.exe" normalerweise ausgeblendet sind, werden auch in der Ausgabe des Befehls Get-ChildItem nicht angezeigt. Wenn Sie ausgeblendete Elemente anzeigen möchten, verwenden Sie den Force-Parameter von Get-ChildItem. Beispiel:
Get-ChildItem -Path C:\Windows -Force
Dieser Parameter ist mit "Force" benannt, da Sie mit diesem das Überschreiben des normalen Verhaltens des Befehls Get-ChildItem erzwingen (engl. "forcing") können. "Force" ist ein häufig verwendeter Parameter, der eine Aktion erzwingt, die ein Cmdlet normalerweise nicht ausführen würde, obwohl dadurch keine Aktionen ausgeführt werden, die die Sicherheit des Systems beeinträchtigen.
Suchen von Elementen mit Platzhaltern
The Get-ChildItem akzeptiert Platzhalter im Pfad der aufzuführenden Elemente.
Da die Suche mit Platzhaltern durch Windows PowerShell behandelt wird, verwenden alle Cmdlets, die Platzhalter akzeptieren, dieselbe Notation und weise dasselbe Verhalten bei Platzhaltern auf. Die Platzhalternotation von Windows PowerShell umfasst:
-
Sternchen (*) – entspricht 0 oder mehr Vorkommen eines beliebigen Zeichens.
-
Fragezeichen (?) – entspricht genau einem Zeichen.
-
Linke eckige Klammer ([) und rechte eckige Klammer (]) – umschließen einen Satz von Zeichen, der gefunden werden soll.
Im Folgenden finden Sie einige Beispiele für die Angabe von Platzhaltern.
Wenn Sie im Verzeichnis "Windows" alle Dateien mit der Endung .log suchen möchten, die ohne Erweiterung genau fünf Zeichen lang sind, geben Sie folgenden Befehl ein:
PS> Get-ChildItem -Path C:\Windows\?????.log Directory: Microsoft.Windows 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 ...
Zum Suchen aller Dateien im Verzeichnis "Windows", die mit dem Buchstaben x beginnen, geben Sie Folgendes ein:
Get-ChildItem -Path C:\Windows\x*
Zum Suchen aller Dateien, deren Name mit x oder z beginnt, geben Sie Folgendes ein:
Get-ChildItem -Path C:\Windows\[xz]*
Ausschließen von Elementen ("-Exclude")
Mit dem Exclude-Parameter von Get-ChildItem können Sie bestimmte Elemente ausschließen. Auf diese Weise können Sie mit einer einzelnen Anweisung eine komplexe Filterung durchführen.
Angenommen Sie möchten die Windows-DLL für den Zeitdienst im Ordner "System32" finden, Sie erinnern sich jedoch lediglich daran, dass der DLL-Name mit "W" beginnt und "32" enthält.
Mit dem Ausdruck w*32*.dll können Sie alle DLLs suchen, die diese Bedingungen erfüllen, jedoch werden möglicherweise auch die Kompatibilitäts-DLLs für Windows 95 und 16-Bit-Windows zurückgegeben, deren Namen "95" oder "16" enthalten. Dateinamen mit diesen Zahlen können Sie überspringen, indem Sie den Exclude-Parameter mit dem Muster *[9516]* verwenden:
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude *[9516]*
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 174592 w32time.dll
-a--- 2004-08-04 8:00 AM 22016 w32topl.dll
-a--- 2004-08-04 8:00 AM 101888 win32spl.dll
-a--- 2004-08-04 8:00 AM 172032 wldap32.dll
-a--- 2004-08-04 8:00 AM 264192 wow32.dll
-a--- 2004-08-04 8:00 AM 82944 ws2_32.dll
-a--- 2004-08-04 8:00 AM 42496 wsnmp32.dll
-a--- 2004-08-04 8:00 AM 22528 wsock32.dll
-a--- 2004-08-04 8:00 AM 18432 wtsapi32.dll
Kombinieren von Parametern für Get-ChildItem
In einem einzelnen Befehl können Sie mehrere Parameter des Cmdlet Get-ChildItem verwenden. Wenn Sie mehrere Parameter gleichzeitig verwenden möchten, sollten Sie unbedingt die Verwendung von Platzhaltern verstanden haben. Beispielsweise gibt der folgende Befehl keine Ergebnisse zurück:
PS> Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
Es werden keine Ergebnisse zurückgegeben, obwohl im Ordner "Windows" zwei DLLs vorhanden sind, die mit dem Buchstaben "z" beginnen.
Der Grund hierfür ist, dass der Platzhalter als Teil des Pfads angegeben wurde. Obwohl der Befehl rekursiv ausgeführt wurde, beschränkt das Cmdlet Get-ChildItem die Elemente auf solche, deren Namen im Ordner "Windows" auf ".dll" enden.
Wenn Sie eine rekursive Suche nach Dateien ausführen möchten, deren Namen einem bestimmten Muster entsprechen, verwenden Sie den -Include-Parameter.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 8261 zoneoc.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 337920 zipfldr.dll