Werken met bestanden, mappen en registersleutels

Windows PowerShell maakt gebruik van het zelfstandige naamwoord Item om te verwijzen naar items op een Windows PowerShell station. Wanneer u te maken hebt Windows PowerShell bestandssysteemprovider, kan een item een bestand, een map of het Windows PowerShell zijn. Het in de meeste beheerinstellingen is een essentiële basistaak om deze items te kunnen onderbrengen en daarmee te werken. Daarom willen we deze taken in detail bespreken.

Bestanden, mappen en registersleutels opsnoemen (Get-ChildItem)

Omdat het ophalen van een verzameling items van een bepaalde locatie een veelvoorkomende taak is, is de cmdlet speciaal ontworpen om alle items te retourneren die in een container zijn gevonden, zoals Get-ChildItem een map.

Als u alle bestanden en mappen wilt retourneren die zich rechtstreeks in de map C: \ Windows, typt u:

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

De vermelding lijkt op wat u zou zien wanneer u de opdracht inCmd.exeof de opdracht in een UNIX dir **** ls opdrachtshell.

U kunt zeer complexe vermeldingen uitvoeren met behulp van parameters van de Get-ChildItem cmdlet . We gaan nu enkele scenario's bekijken. U kunt de syntaxis van de Get-ChildItem cmdlet zien door het volgende te typen:

Get-Command -Name Get-ChildItem -Syntax

Deze parameters kunnen worden gecombineerd en gematcht om zeer aangepaste uitvoer te krijgen.

Alle ingesloten items (-Recurse)

Als u zowel de items in een Windows map als alle items in de submappen wilt zien, gebruikt u de parameter Recurse van Get-ChildItem . De vermelding geeft alles weer in de Windows map en de items in de submappen. Bijvoorbeeld:

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

Items filteren op naam (-naam)

Als u alleen de namen van items wilt weergeven, gebruikt u de parameter Naam van Get-Childitem :

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

Geforceerd lijst met verborgen items (-force)

Items die normaal gesproken onzichtbaar zijn in Verkenner of Cmd.exe worden niet weergegeven in de uitvoer van een Get-ChildItem opdracht. Als u verborgen items wilt weergeven, gebruikt u de parameter Force van Get-ChildItem . Bijvoorbeeld:

Get-ChildItem -Path C:\Windows -Force

Deze parameter heet Force omdat u het normale gedrag van de opdracht geforceerder kunt Get-ChildItem overschrijven. Force is een veelgebruikte parameter waarmee een actie wordt geforceerd die een cmdlet normaal gesproken niet zou uitvoeren, hoewel er geen acties worden ondernomen die de beveiliging van het systeem in gevaar brengen.

Overeenkomende itemnamen met jokertekens

De Get-ChildItem opdracht accepteert jokertekens in het pad van de items die moeten worden weergegeven.

Omdat jokertekens worden gebruikt door de Windows PowerShell-engine, gebruiken alle cmdlets die jokertekens accepteren dezelfde notatie en hebben ze hetzelfde overeenkomende gedrag. De Windows PowerShell jokertekens omvatten:

  • Sterretje ( * ) komt overeen met nul of meer exemplaren van een teken.

  • Vraagteken ( ? ) komt overeen met precies één teken.

  • Het teken links [ () en het rechterhake-teken () rond een ] set tekens die moeten worden gematcht.

Hier volgen enkele voorbeelden van hoe de specificatie van jokertekens werkt.

Als u alle bestanden in de Windows map met het achtervoegsel en exact vijf tekens in de basisnaam .log wilt zoeken, voert u de volgende opdracht in:

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

Als u wilt zoeken naar alle bestanden die beginnen met de letter in Windows x map, typt u:

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

Als u wilt zoeken naar alle bestanden waarvan de naam begint met "x" of "z", typt u:

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

Zie voor meer informatie over jokertekens about_Wildcards.

Items uitsluiten (-Uitsluiten)

U kunt specifieke items uitsluiten met behulp van de parameter Exclude van Get-ChildItem . Hiermee kunt u complexe filters uitvoeren in één instructie.

Stel bijvoorbeeld dat u de DLL Windows Time Service in de map System32 probeert te vinden. U weet alleen nog dat de DLL-naam begint met 'W' en dat er '32' in staat.

Een expressie zoals vindt alle DLL's die voldoen aan de voorwaarden, maar u kunt de bestanden verder filteren en w*32*.dll win32-bestanden weglaten. U kunt deze bestanden weglaten met behulp van de parameter Exclude met het patroon 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

Combinatie Get-ChildItem parameters

U kunt verschillende parameters van de Get-ChildItem cmdlet gebruiken in dezelfde opdracht. Voordat u parameters combineert, moet u ervoor zorgen dat u jokertekens begrijpt. De volgende opdracht retourneert bijvoorbeeld geen resultaten:

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

Er zijn geen resultaten, ook al zijn er twee DLL's die beginnen met de letter 'z' in de Windows map.

Er zijn geen resultaten geretourneerd omdat we het jokerteken als onderdeel van het pad hebben opgegeven. Hoewel de opdracht recursief is, beperkt de cmdlet de items tot de items die zich in de map Windows met namen die eindigen Get-ChildItem op .dll .

Als u een recursieve zoekopdracht wilt opgeven voor bestanden waarvan de namen overeenkomen met een speciaal patroon, gebruikt u de parameter 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