Udostępnij za pomocą


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. Praca z tymi elementami jest podstawowym zadaniem w większości środowisk 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, polecenie cmdlet Get-ChildItem 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 polecenia dir w cmd.exe, albo polecenia ls w powłoce poleceń systemu Unix.

Złożone listy można wykonywać przy użyciu parametrów polecenia cmdlet Get-ChildItem. Aby zobaczyć składnię polecenia cmdlet Get-ChildItem, wpisz:

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 RecurseGet-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 NameGet-ChildItem:

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

Przymusowe wyświetlanie ukrytych elementów

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

Get-ChildItem -Path C:\Windows -Force

Ten parametr nosi nazwę Force, ponieważ można forcownie zastąpić normalne zachowanie polecenia Get-ChildItem. Force jest powszechnie używanym parametrem, który wymusza wykonanie operacji, jakiej polecenie typu cmdlet normalnie by nie przeprowadziło, chociaż nie może wykonać żadnej akcji, która naruszałaby bezpieczeństwo systemu.

Dopasowywanie nazw elementów używając symboli wieloznacznych

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

Ponieważ dopasowywanie symboli wieloznacznych jest obsługiwane przez silnik 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 ([) i prawy nawias (]) 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 ExcludeGet-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 czasowej systemu Windows w folderze System32, a wszystko, co pamiętasz o nazwie DLL, to to, że zaczyna się od "W" i zawiera "32".

Wyrażenie takie jak w*32*.dll znajdzie wszystkie biblioteki DLL spełniające warunki, ale warto dodatkowo odfiltrować pliki i pominąć wszystkie pliki win32. Możesz pominąć te pliki przy użyciu parametru Exclude z 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 polecenia cmdlet Get-ChildItem. 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 zwrócono żadnych wyników, ponieważ symbol wieloznaczny został określony jako część ścieżki. Mimo że polecenie było cykliczne, polecenie cmdlet Get-ChildItem ograniczyło elementy do tych, które znajdują się w folderze systemu Windows z nazwami kończącymi się .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