Práce se soubory, složkami a klíči registru

Windows PowerShell pomocí položky podstatného jména odkazuje na položky nalezené na jednotce Windows PowerShell. Při práci s poskytovatelem Windows PowerShell FileSystem může být položka soubor, složka nebo jednotka Windows PowerShell. Výpis těchto položek a práce s těmito položkami je kritickým základním úkolem ve většině nastavení správy, takže chceme tyto úkoly podrobně probrat.

Výčet souborů, složek a klíčů registru (Get-ChildItem)

Vzhledem k tomu, že získání kolekce položek z určitého umístění je takový běžný úkol, je rutina navržena speciálně pro vrácení všech položek nalezených v kontejneru, Get-ChildItem jako je například složka.

Pokud chcete vrátit všechny soubory a složky, které jsou obsažené přímo ve složce C:\Windows, zadejte:

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

Výpis vypadá podobně jako příkaz, který byste viděli při zadávání dir příkazu v Cmd.exenebo ls příkazu v příkazovém prostředí UNIX.

Pomocí parametrů Get-ChildItem rutiny můžete provádět velmi složité výpisy. Podíváme se na několik dalších scénářů. Syntaxi Get-ChildItem rutiny můžete zobrazit zadáním:

Get-Command -Name Get-ChildItem -Syntax

Tyto parametry se dají kombinovat a spárovat, aby získaly vysoce přizpůsobený výstup.

Výpis všech obsažených položek (-Recurse)

Pokud chcete zobrazit položky uvnitř složky Windows i všechny položky obsažené v podsložkách, použijte parametr Recurse .Get-ChildItem Výpis zobrazí vše ve složce Windows a položky v jejích podsložkách. Příklad:

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

Filtrování položek podle názvu (-name)

Chcete-li zobrazit pouze názvy položek, použijte parametr Name parametru Get-Childitem:

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

Vynucený výpis skrytých položek (-Force)

Položky, které jsou v Průzkumník souborů nebo Cmd.exe obvykle neviditelné, se ve výstupu Get-ChildItem příkazu nezobrazují. Chcete-li zobrazit skryté položky, použijte parametrGet-ChildItemForce . Příklad:

Get-ChildItem -Path C:\Windows -Force

Tento parametr má název Force, protože můžete vynuceně přepsat normální chování Get-ChildItem příkazu. Force je široce používaný parametr, který vynutí akci, kterou rutina normálně neprovede, i když neprovede žádnou akci, která by ohrozit zabezpečení systému.

Odpovídající názvy položek se zástupnými znaků

Příkaz Get-ChildItem přijímá zástupné cardy v cestě k položkám do seznamu.

Vzhledem k tomu, že modul Windows PowerShell zpracovává porovnávání zástupných znaků, používají všechny rutiny, které přijímají zástupné znaméně, stejnou notaci a mají stejné odpovídající chování. Zápis se zástupnými znaméty Windows PowerShell zahrnuje:

  • Hvězdička (*) odpovídá nule nebo více výskytů libovolného znaku.

  • Otazník (?) odpovídá přesně jednomu znaku.

  • Znak levé závorky ([) a pravá závorka (]) obklopují sadu znaků, které se mají shodovat.

Tady je několik příkladů, jak funguje specifikace zástupných znaků.

Pokud chcete najít všechny soubory v adresáři Windows s příponou .log a přesně pět znaků v základním názvu, zadejte následující příkaz:

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

Pokud chcete najít všechny soubory, které začínají písmenem x v adresáři Windows, zadejte:

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

Pokud chcete najít všechny soubory, jejichž názvy začínají písmenem "x" nebo "z", zadejte:

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

Další informace o zástupných nárcích najdete v tématu about_Wildcards.

Vyloučení položek (vyloučení)

Konkrétní položky můžete vyloučit pomocí parametru Exclude parametru Get-ChildItem. To vám umožní provádět složité filtrování v jednom příkazu.

Předpokládejme například, že se pokoušíte najít knihovnu DLL služby Windows Time Service ve složce System32 a vše, co si můžete zapamatovat o názvu knihovny DLL je, že začíná na "W" a má v ní "32".

Výraz jako w*32*.dll najde všechny knihovny DLL, které splňují podmínky, ale možná budete chtít soubory dále vyfiltrovat a vynechat všechny soubory win32. Tyto soubory můžete vynechat pomocí parametru Exclude se vzorem 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

Míchání parametrů Get-ChildItem

Ve stejném příkazu můžete použít několik parametrů Get-ChildItem rutiny. Než budete kombinovat parametry, ujistěte se, že rozumíte porovnávání se zástupnými metry. Následující příkaz například nevrací žádné výsledky:

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

Neexistují žádné výsledky, i když existují dvě knihovny DLL, které začínají písmenem "z" ve složce Windows.

Nebyly vráceny žádné výsledky, protože jsme zadali zástupný znak jako součást cesty. I když byl příkaz rekurzivní, Get-ChildItem rutina omezila položky na položky, které jsou ve složce Windows s názvy končícími .dll.

Pokud chcete zadat rekurzivní vyhledávání souborů, jejichž názvy odpovídají speciálnímu vzoru, použijte parametr 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