Praca z plikami, folderami i kluczami rejestru

Ten przykład dotyczy tylko platform systemu Windows.

Program PowerShell używa rzeczownika Item do odwoływania się do elementów znalezionych na dysku programu PowerShell. W przypadku pracy z dostawcą systemu plików programu PowerShell element może być plikiem, folderem lub dyskiem programu PowerShell. Wyświetlanie listy i praca z tymi elementami jest krytycznym zadaniem podstawowym w większości ustawień administracyjnych, dlatego chcemy szczegółowo omówić te zadania.

Wyliczanie plików, folderów i kluczy rejestru

Ponieważ pobieranie kolekcji elementów z określonej lokalizacji jest tak typowym zadaniem, Get-ChildItem polecenie cmdlet zostało zaprojektowane specjalnie w celu zwrócenia wszystkich elementów znajdujących się w kontenerze, takim jak folder.

Jeśli chcesz zwrócić wszystkie pliki i foldery znajdujące się bezpośrednio w folderze C:\Windows, wpisz:

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

Lista wygląda podobnie do tego, co można zobaczyć po wprowadzeniu dir polecenia w cmd.exepliku lub ls polecenia w powłoce poleceń system UNIX.

Złożone listy można wykonywać przy użyciu parametrów Get-ChildItem polecenia cmdlet. Składnię Get-ChildItem polecenia cmdlet można zobaczyć, wpisując:

Get-Command -Name Get-ChildItem -Syntax

Te parametry można mieszać i dopasowywać w celu uzyskania wysoce dostosowanych danych wyjściowych.

Wyświetlanie listy wszystkich zawartych elementów

Aby wyświetlić zarówno elementy w folderze systemu Windows, jak i wszystkie elementy zawarte w podfolderach, użyj parametru Recurse polecenia Get-ChildItem. Na liście są wyświetlane wszystkie elementy w folderze systemu Windows i elementy w jego podfolderach. Na przykład:

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

Filtrowanie elementów według nazwy

Aby wyświetlić tylko nazwy elementów, użyj parametru Name elementu Get-Childitem:

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

Wymuszanie wyświetlania ukrytych elementów

Elementy ukryte w Eksplorator plików lub cmd.exe nie są wyświetlane w danych wyjściowych Get-ChildItem polecenia. Aby wyświetlić ukryte elementy, użyj parametru Force elementu Get-ChildItem. Na przykład:

Get-ChildItem -Path C:\Windows -Force

Ten parametr ma nazwę Force , ponieważ można wymuszać wymuszanie normalnego Get-ChildItem zachowania polecenia. Force jest powszechnie używanym parametrem, który wymusza działanie, którego polecenie cmdlet normalnie nie wykona, chociaż nie może wykonać żadnej akcji, która narusza bezpieczeństwo systemu.

Dopasowywanie nazw elementów z symbolami wieloznacznymi

Polecenie Get-ChildItem akceptuje symbole wieloznaczne w ścieżce elementów do listy.

Ponieważ dopasowywanie symboli wieloznacznych jest obsługiwane przez aparat programu PowerShell, wszystkie polecenia cmdlet, które akceptują symbole wieloznaczne, używają tej samej notacji i mają takie samo zachowanie dopasowania. Notacja symboli wieloznacznych programu PowerShell obejmuje:

  • Gwiazdka (*) pasuje do zera lub większej liczby wystąpień dowolnego znaku.
  • Znak zapytania (?) pasuje dokładnie do jednego znaku.
  • Lewy nawias kwadratowy ([) i znak prawego nawiasu (]) otaczają zestaw znaków do dopasowania.

Oto kilka przykładów działania specyfikacji symboli wieloznacznych.

Aby znaleźć wszystkie pliki w katalogu systemu Windows z sufiksem .log i dokładnie pięć znaków w nazwie podstawowej, wprowadź następujące polecenie:

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

Aby znaleźć wszystkie pliki rozpoczynające się literą x w katalogu systemu Windows, wpisz:

Get-ChildItem -Path C:\Windows\x*

Aby znaleźć wszystkie pliki, których nazwy zaczynają się od "x" lub "z", wpisz:

Get-ChildItem -Path C:\Windows\[xz]*

Aby uzyskać więcej informacji na temat symboli wieloznacznych, zobacz about_Wildcards.

Wykluczanie elementów

Określone elementy można wykluczyć przy użyciu parametru Exclude parametru Get-ChildItem. Dzięki temu można wykonywać złożone filtrowanie w jednej instrukcji.

Załóżmy na przykład, że próbujesz znaleźć bibliotekę DLL usługi Czas systemu Windows w folderze System32 , a wszystko, co pamiętasz o nazwie DLL, jest to, że zaczyna się od "W" i ma w nim wartość "32".

Wyrażenie, takie jak w*32*.dll , znajdzie wszystkie biblioteki DLL spełniające warunki, ale możesz jeszcze bardziej odfiltrować pliki i pominąć wszystkie pliki win32. Możesz pominąć te pliki przy użyciu parametru Exclude ze wzorcem win*:

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

Mieszanie parametrów Get-ChildItem

W tym samym poleceniu można użyć kilku parametrów Get-ChildItem polecenia cmdlet. Przed połączeniem parametrów upewnij się, że rozumiesz dopasowywanie symboli wieloznacznych. Na przykład następujące polecenie nie zwraca żadnych wyników:

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

Nie ma żadnych wyników, mimo że istnieją dwie biblioteki DLL rozpoczynające się literą "z" w folderze systemu Windows.

Nie zostały zwrócone żadne wyniki, ponieważ jako część ścieżki określono symbol wieloznaczny. Mimo że polecenie było cykliczne, Get-ChildItem polecenie cmdlet ograniczyło elementy do tych, które znajdują się w folderze systemu Windows z nazwami kończącymi się na .dll.

Aby określić cykliczne wyszukiwanie plików, których nazwy pasują do specjalnego wzorca, użyj parametru Include .

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