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