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