Arbeta med filer, mappar och registernycklar

Windows PowerShell använder substantivobjektet för att referera till objekt som finns på Windows PowerShell enhet. När du hanterar Windows PowerShell FileSystem-providern kan ett objekt vara en fil, en mapp eller Windows PowerShell enhet. Att lista och arbeta med dessa objekt är en viktig grundläggande uppgift i de flesta administrativa inställningar, så vi vill diskutera dessa uppgifter i detalj.

Räkna upp filer, mappar och registernycklar (Get-ChildItem)

Eftersom det är så vanligt att hämta en samling objekt från en viss plats är cmdleten utformad specifikt för att returnera alla objekt som finns i en container, till Get-ChildItem exempel en mapp.

Om du vill returnera alla filer och mappar som finns direkt i mappen C: \ Windows skriver du:

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

Listan ser ut ungefär som när du anger kommandot iCmd.exe, eller kommandot i ett dir UNIX **** ls kommandogränssnitt.

Du kan utföra mycket komplexa listor med hjälp av parametrar för Get-ChildItem cmdleten . Vi ska titta på några scenarier härnäst. Du kan se syntaxen för Get-ChildItem cmdleten genom att skriva:

Get-Command -Name Get-ChildItem -Syntax

Dessa parametrar kan blandas och matchas för att få mycket anpassade utdata.

Lista alla inneslutna objekt (-Rekursera)

Om du vill se både objekten Windows en mapp och alla objekt som finns i undermapparna använder du parametern Recurse i Get-ChildItem . I listan visas allt i Windows mappen och objekten i dess undermappar. Exempel:

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

Filtrera objekt efter namn (-Namn)

Om du bara vill visa namnen på objekten använder du parametern Name i Get-Childitem :

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

Tvinga fram en lista över dolda objekt (-Force)

Objekt som normalt är osynliga i Utforskaren eller Cmd.exe visas inte i utdata från ett Get-ChildItem kommando. Om du vill visa dolda objekt använder du force-parametern för Get-ChildItem . Exempel:

Get-ChildItem -Path C:\Windows -Force

Den här parametern heter Force eftersom du kan åsidosätta kommandots normala beteende med Get-ChildItem tvång. Force är en mycket använd parameter som tvingar fram en åtgärd som en cmdlet normalt inte skulle utföra, även om den inte utför någon åtgärd som äventyrar systemets säkerhet.

Matcha objektnamn med jokertecken

Kommandot Get-ChildItem accepterar jokertecken i sökvägen för de objekt som ska listas.

Eftersom matchning med jokertecken hanteras av Windows PowerShell-motorn använder alla cmdlets som accepterar jokertecken samma notation och har samma matchningsbeteende. Den Windows PowerShell jokertecknet innehåller:

  • Asterisk ( * ) matchar noll eller flera förekomster av ett tecken.

  • Frågetecken ( ? ) matchar exakt ett tecken.

  • Vänster [ hakparentes ( ) och höger ] hakparentes ( ) omger en uppsättning tecken som ska matchas.

Här följer några exempel på hur jokerteckenspecifikation fungerar.

Om du vill hitta alla filer Windows katalogen med suffixet och exakt fem tecken i basnamnet .log anger du följande kommando:

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

Om du vill hitta alla filer som börjar med x bokstaven i Windows-katalogen skriver du:

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

Om du vill hitta alla filer vars namn börjar med "x" eller "z" skriver du:

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

Mer information om jokertecken finns i about_Wildcards.

Exkludera objekt (-Exkludera)

Du kan undanta specifika objekt med hjälp av parametern Exkludera i Get-ChildItem . På så sätt kan du utföra komplex filtrering i en enda instruktion.

Anta till exempel att du försöker hitta Windows Time Service DLL i mappen System32 och allt du kan komma ihåg om DLL-namnet är att den börjar med "W" och har "32" i den.

Ett uttryck som hittar alla DLL:er som uppfyller villkoren, men du kanske vill filtrera bort filerna ytterligare och w*32*.dll utelämna win32-filer. Du kan utelämna dessa filer med hjälp av parametern Exkludera med mönstret 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

Blanda Get-ChildItem parametrar

Du kan använda flera av parametrarna för Get-ChildItem cmdleten i samma kommando. Innan du blandar parametrar måste du se till att du förstår matchning med jokertecken. Följande kommando returnerar till exempel inga resultat:

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

Det finns inga resultat, även om det finns två DLL:er som börjar med bokstaven "z" i Windows mappen.

Inga resultat returnerades eftersom vi angav jokertecknet som en del av sökvägen. Även om kommandot var rekursivt begränsade cmdleten objekten till de som finns i mappen Windows med namn som Get-ChildItem slutar med .dll .

Om du vill ange en rekursiv sökning efter filer vars namn matchar ett särskilt mönster använder du parametern Inkludera.

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