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

Tato ukázka platí jenom pro platformy Windows.

PowerShell používá položku podstatného jména k odkazu na položky nalezené na jednotce PowerShellu. Při práci s poskytovatelem systému souborů PowerShellu může být položka soubor, složka nebo jednotka PowerShellu. Výpis a práce s těmito položkami je zásadní základní úlohou ve většině nastavení správy, takže tyto úkoly chceme podrobně probrat.

Výčet souborů, složek a klíčů registru

Vzhledem k tomu, že získání kolekce položek z určitého umístění je taková běžná úloha, je rutina navržená speciálně tak, Get-ChildItem aby vracela všechny položky nalezené v kontejneru, jako je složka.

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

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

Výpis vypadá podobně jako příkaz, který byste viděli, když zadáte dir příkaz do cmd.exe, nebo ls příkaz v systém UNIX příkazovém prostředí.

Složité výpisy můžete provádět pomocí parametrů rutiny Get-ChildItem . Syntaxi rutiny Get-ChildItem 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

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

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

Filtrování položek podle názvu

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

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

Vynucený výpis skrytých položek

Položky skryté v Průzkumník souborů nebo cmd.exe se nezobrazují ve výstupu Get-ChildItem příkazu. Chcete-li zobrazit skryté položky, použijte vynutit parametr Get-ChildItem. 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 by rutina normálně neprovedla, i když nemůže provádět žádnou akci, která by ohrozit zabezpečení systému.

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

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

Vzhledem k tomu, že modul PowerShellu zpracovává porovnávání se zástupnými znamény, všechny rutiny, které přijímají zástupné znamény, používají stejnou notaci a mají stejné odpovídající chování. Zápis se zástupnými znaméčky PowerShellu 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á hranatá 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.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 Systému Windows, zadejte:

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

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

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

Další informace ozástupných about_Wildcards ch

Vyloučení položek

Konkrétní položky můžete vyloučit pomocí parametru Exclude parametru Get-ChildItem. Díky tomu můžete 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 je, najde všechny knihovny DLL, které splňují podmínky, ale můžete chtít dále vyfiltrovat soubory 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

Kombinování parametrů Get-ChildItem

Ve stejném příkazu můžete použít několik parametrů Get-ChildItem rutiny. Před kombinováním parametrů se ujistěte, že rozumíte porovnávání zástupných znaků. Například následující příkaz nevrátí žá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 jako součást cesty zadali zástupný znak. 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.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