Arbeiten mit Dateien, Ordnern und Registrierungsschlüsseln
Dieses Beispiel gilt nur für Windows-Plattformen.
PowerShell verwendet das Substantiv Item zum Verweisen auf Elemente auf einem PowerShell-Laufwerk. Im Zusammenhang mit dem PowerShell-Anbieter FileSystem kann ein Item eine Datei, ein Ordner oder das PowerShell-Laufwerk sein. Das Auflisten dieser Elemente und die Arbeiten damit ist in den meisten Verwaltungseinstellungen eine wichtige grundlegende Aufgabe. Daher sollen diese Aufgaben ausführlich erläutert werden.
Auflisten von Dateien, Ordnern und Registrierungsschlüsseln
Da das Abrufen einer Sammlung von Elementen von einem bestimmten Standort eine sehr häufige Aufgabe ist, wurde das Cmdlet Get-ChildItem
speziell dafür entwickelt, alle in einem Container, z. B. einem Ordner, gefundenen Elemente zurückzugeben.
Um alle Dateien und Ordner anzuzeigen, die direkt im Ordner C:\Windows
enthalten sind, geben Sie Folgendes ein:
PS> Get-ChildItem -Path C:\Windows
Directory: Microsoft.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 gleicht der Ausgabe nach Eingabe des Befehls dir
in cmd.exe
oder des Befehls ls
in einer UNIX-Befehlsshell.
Sie können unter Verwendung der Parameter des Cmdlets Get-ChildItem
komplexe Auflistungen erstellen. Sie können die Syntax des Cmdlets Get-ChildItem
anzeigen, indem Sie Folgendes eingeben:
Get-Command -Name Get-ChildItem -Syntax
Diese Parameter können gemischt und angepasst werden, um eine stark angepasste Ausgabe zu erhalten.
Auflisten aller enthaltenen Elemente
Verwenden Sie den Parameter Recurse von Get-ChildItem
, um sowohl die Elemente in einem Windows-Ordner als auch alle in dessen Unterordnern enthaltenen Elemente anzuzeigen. Die Auflistung zeigt alles, was im Windows-Ordner enthalten ist, und alle Elemente in seinen Unterordnern an. Beispiel:
PS> Get-ChildItem -Path C:\WINDOWS -Recurse
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll
...
Filtern von Elementen anhand des Namens
Verwenden Sie den Parameter Name von Get-Childitem
, um nur die Elementnamen anzuzeigen:
PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...
Erzwungenes Auflisten von ausgeblendeten Elementen
Elemente, die normalerweise im Datei-Explorer oder in cmd.exe
nicht sichtbar sind, werden in der Ausgabe des Befehls Get-ChildItem
nicht angezeigt. Verwenden Sie den Parameter Force von Get-ChildItem
, um ausgeblendete Elemente anzuzeigen.
Beispiel:
Get-ChildItem -Path C:\Windows -Force
Dieser Parameter heißt Force (Erzwingen), da Sie mit ihm erzwingen können, dass das normale Verhalten des Befehls Get-ChildItem
außer Kraft gesetzt wird. Force ist ein weit verbreiteter Parameter, der eine Aktion erzwingt, die ein Cmdlet normalerweise nicht ausführen würde. Allerdings wird keine Aktion ausgeführt, die die Sicherheit des Systems gefährden würde.
Abgleichen von Elementnamen mit Platzhaltern
Der Befehl Get-ChildItem
akzeptiert Platzhalter im Pfad der aufzulistenden Elemente.
Da das Abgleichen von Platzhaltern von der PowerShell-Engine durchgeführt wird, verwenden alle Cmdlets, die Platzhalter akzeptieren, die gleiche Notation und das gleiche Abgleichverhalten. Die PowerShell-Notation für Platzhalter umfasst Folgendes:
- Das Sternchen (
*
) steht für null oder mehr beliebige Zeichen. - Das Fragezeichen (
?
) steht für genau ein Zeichen. - Die linke eckige Klammer (
[
) und die rechte eckige Klammer (]
) umgeben eine Gruppe von Zeichen, die für den Abgleich verwendet werden soll.
Hier sind einige Beispiele für die Funktionsweise der Platzhalterspezifikation.
Geben Sie den folgenden Befehl ein, um im Windows-Verzeichnis alle Dateien mit dem Suffix .log
und genau fünf Zeichen im Basisnamen zu suchen:
PS> Get-ChildItem -Path C:\Windows\?????.log
Directory: Microsoft.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
...
Geben Sie Folgendes ein, um im Windows-Verzeichnis alle Dateien zu suchen, die mit dem Buchstaben x
beginnen:
Get-ChildItem -Path C:\Windows\x*
Geben Sie Folgendes ein, um alle Dateien zu suchen, deren Name mit „x“ oder „z“ beginnt:
Get-ChildItem -Path C:\Windows\[xz]*
Weitere Informationen zu Platzhaltern finden Sie unter about_Wildcards.
Ausschließen von Elementen
Mithilfe des Exclude-Parameters von Get-ChildItem
können Sie bestimmte Elemente ausschließen. Auf diese Weise können Sie eine komplexe Filterung in einer einzigen Anweisung durchführen.
Angenommen, Sie möchten etwa die Windows Time Service-DLL im Ordner System32 suchen. Sie können sich jedoch nur daran erinnern, dass der Name der DLL mit „W“ beginnt und „32“ enthält.
Mit einem Ausdruck wie w*32*.dll
finden Sie alle DLLs, die die Bedingungen erfüllen. Sie sollten jedoch weitere Dateien herausfiltern, nämlich alle Win32-Dateien. Mithilfe des Exclude-Parameters mit dem Muster win*
können Sie diese Dateien herausfiltern:
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*
Directory: C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 3/18/2019 9:43 PM 495616 w32time.dll
-a--- 3/18/2019 9:44 PM 35328 w32topl.dll
-a--- 1/24/2020 5:44 PM 401920 Wldap32.dll
-a--- 10/10/2019 5:40 PM 442704 ws2_32.dll
-a--- 3/18/2019 9:44 PM 66048 wsnmp32.dll
-a--- 3/18/2019 9:44 PM 18944 wsock32.dll
-a--- 3/18/2019 9:44 PM 64792 wtsapi32.dll
Kombinieren von „Get-ChildItem“-Parametern
Sie können verschiedene Parameter des Cmdlets Get-ChildItem
im gleichen Befehl verwenden. Bevor Sie Parameter kombinieren, sollten Sie sicher sein, dass Sie das Abgleichen mit Platzhalterzeichen verstanden haben. Beispielsweise gibt der folgende Befehl keine Ergebnisse zurück:
Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
Es werden keine Ergebnisse zurückgegeben, obwohl es im Windows-Ordner zwei DLLs gibt, die mit dem Buchstaben „z“ beginnen.
Es wurden keine Ergebnisse zurückgegeben, weil das Platzhalterzeichen als Teil des Pfads angegeben wurde. Obwohl der Befehl rekursiv war, hat das Cmdlet Get-ChildItem
die Elemente im Windows-Ordner auf diejenigen beschränkt, deren Name mit .dll
endet.
Mithilfe des Parameters Include können Sie eine rekursive Suche nach Dateien angeben, deren Name einem bestimmten Muster entspricht.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 8261 zoneoc.dll
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 337920 zipfldr.dll