Praca z plikami, folderami i kluczami rejestru

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

Wyliczanie plików, folderów i kluczy rejestru (Get-ChildItem)

Ponieważ pobieranie kolekcji elementów z określonej lokalizacji jest tak typowym zadaniem, Get-ChildItem polecenie cmdlet jest przeznaczone specjalnie do zwracania wszystkich elementów znajdujących się w kontenerze, takim jak folder.

Jeśli chcesz zwrócić wszystkie pliki i foldery zawarte bezpośrednio w folderze C:\Windows, wpisz:

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

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

Można wykonywać bardzo złożone listy przy użyciu parametrów Get-ChildItem polecenia cmdlet. Przyjrzymy się kilku scenariuszom w następnej kolejności. Składnię Get-ChildItem polecenia cmdlet można wyświetlić, 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 (-Recurse)

Aby wyświetlić zarówno elementy w folderze systemu Windows, jak i wszystkie elementy zawarte w podfolderach, użyj parametru Recurse .Get-ChildItem Lista zawiera wszystkie elementy w folderze systemu Windows i elementach w jego podfolderach. Na przykład:

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

Filtrowanie elementów według nazwy (-Name)

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

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

Wymuszanie wyświetlania listy ukrytych elementów (-Force)

Elementy, które są zwykle niewidoczne 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 wymuszono zastąpić normalne zachowanie Get-ChildItem polecenia. Force jest powszechnie używanym parametrem, który wymusza działanie, którego polecenie cmdlet nie wykonuje normalnie, chociaż nie wykona żadnej akcji, która narusza bezpieczeństwo systemu.

Pasujące nazwy elementów z symbolami wieloznacznymi

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

Ponieważ dopasowanie symboli wieloznacznych jest obsługiwane przez aparat Windows PowerShell, wszystkie polecenia cmdlet akceptujące symbole wieloznaczne używają tej samej notacji i mają takie samo zgodne zachowanie. Notacja symboli wieloznacznych Windows 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 prawy nawias kwadratowy ([]) otacza zestaw znaków, które mają być dopasowane.

Poniżej przedstawiono 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.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
...

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 (wykluczanie)

Określone elementy można wykluczyć przy użyciu parametru Exclude elementu Get-ChildItem. Umożliwia to wykonywanie złożonego filtrowania w jednej instrukcji.

Załóżmy na przykład, że próbujesz znaleźć bibliotekę DLL usługi czasowej systemu Windows w folderze System32 i pamiętasz, że nazwa biblioteki DLL 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 dodatkowo 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ż w ramach ścieżki określono symbol wieloznaczny. Mimo że polecenie było rekursywne, 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.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