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