Met registersleutels werken

Dit voorbeeld is alleen van toepassing op Windows-platforms.

Omdat registersleutels items op PowerShell-stations zijn, is het werken met deze stations vergelijkbaar met het werken met bestanden en mappen. Een belangrijk verschil is dat elk item op een op een register gebaseerd PowerShell-station een container is, net als een map op een bestandssysteemstation. Registervermeldingen en de bijbehorende waarden zijn echter eigenschappen van de items, niet afzonderlijke items.

Alle subsleutels van een registersleutel weergeven

U kunt alle items rechtstreeks in een registersleutel weergeven met behulp van Get-ChildItem. Voeg de optionele parameter Force toe om verborgen of systeemitems weer te geven. Met deze opdracht worden bijvoorbeeld de items rechtstreeks in het PowerShell-station HKCU:weergegeven, wat overeenkomt met de HKEY_CURRENT_USER register hive:

Get-ChildItem -Path HKCU:\ | Select-Object Name
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

Name
----
HKEY_CURRENT_USER\AppEvents
HKEY_CURRENT_USER\Console
HKEY_CURRENT_USER\Control Panel
HKEY_CURRENT_USER\DirectShow
HKEY_CURRENT_USER\dummy
HKEY_CURRENT_USER\Environment
HKEY_CURRENT_USER\EUDC
HKEY_CURRENT_USER\Keyboard Layout
HKEY_CURRENT_USER\MediaFoundation
HKEY_CURRENT_USER\Microsoft
HKEY_CURRENT_USER\Network
HKEY_CURRENT_USER\Printers
HKEY_CURRENT_USER\Software
HKEY_CURRENT_USER\System
HKEY_CURRENT_USER\Uninstall
HKEY_CURRENT_USER\WXP
HKEY_CURRENT_USER\Volatile Environment

Dit zijn de sleutels op het hoogste niveau die zichtbaar zijn in HKEY_CURRENT_USER de Register-editor (regedit.exe).

U kunt dit registerpad ook opgeven door de naam van de registerprovider op te geven, gevolgd door ::. De volledige naam van de registerprovider is Microsoft.PowerShell.Core\Registry, maar dit kan worden ingekort tot alleen Registry. Met een van de volgende opdrachten wordt de inhoud direct onder HKCU:vermeld.

Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:

Met deze opdrachten worden alleen de rechtstreeks ingesloten items weergegeven, net zoals het gebruik DIR in cmd.exe of ls in een UNIX-shell. Als u ingesloten items wilt weergeven, moet u de parameter Recurse opgeven. Gebruik de volgende opdracht om alle registersleutels weer HKCU:te geven.

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem kan complexe filtermogelijkheden uitvoeren via de parameters Path, Filter, Include en Exclude , maar deze parameters zijn doorgaans alleen gebaseerd op de naam. U kunt complexe filters uitvoeren op basis van andere eigenschappen van items met behulp van de Where-Object cmdlet. Met de volgende opdracht worden alle sleutels gevonden HKCU:\Software die niet meer dan één subsleutel hebben en ook exact vier waarden hebben:

Get-ChildItem -Path HKCU:\Software -Recurse |
    Where-Object {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

Sleutels kopiëren

Kopiëren wordt uitgevoerd met Copy-Item. In het volgende voorbeeld wordt de CurrentVersion subsleutel van HKLM:\SOFTWARE\Microsoft\Windows\ en alle eigenschappen gekopieerd naar HKCU:\.

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:

Als u deze nieuwe sleutel in de registereditor onderzoekt of gebruikt Get-ChildItem, ziet u dat u geen kopieën van de ingesloten subsleutels op de nieuwe locatie hebt. Als u alle inhoud van een container wilt kopiëren, moet u de parameter Recurse opgeven. Als u de voorgaande kopieeropdracht recursief wilt maken, gebruikt u deze opdracht:

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse

U kunt nog steeds andere hulpprogramma's gebruiken die u al hebt om bestandssysteemkopieën uit te voeren. Hulpprogramma's voor registerbewerking, waaronderreg.exe, regini.exeregedit.exeen COM-objecten die registerbewerkingen ondersteunen, zoals WScript.Shell en de StdRegProv-klasse van WMI, kunnen vanuit PowerShell worden gebruikt.

Sleutels maken

Het maken van nieuwe sleutels in het register is eenvoudiger dan het maken van een nieuw item in een bestandssysteem. Omdat alle registersleutels containers zijn, hoeft u het itemtype niet op te geven. Geef gewoon een expliciet pad op, zoals:

New-Item -Path HKCU:\Software_DeleteMe

U kunt ook een pad op basis van een provider gebruiken om een sleutel op te geven:

New-Item -Path Registry::HKCU\Software_DeleteMe

Sleutels verwijderen

Het verwijderen van items is in wezen hetzelfde voor alle providers. Met de volgende opdrachten worden items op de achtergrond verwijderd:

Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'

Alle sleutels onder een specifieke sleutel verwijderen

U kunt ingesloten items verwijderen met behulp van Remove-Item, maar u wordt gevraagd om de verwijdering te bevestigen als het item iets anders bevat. Als we bijvoorbeeld proberen de HKCU:\CurrentVersion gemaakte subsleutel te verwijderen, zien we dit:

Remove-Item -Path HKCU:\CurrentVersion
Confirm
The item at HKCU:\CurrentVersion\AdminDebug has children and the -recurse
parameter was not specified. If you continue, all children will be removed with
the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Als u ingesloten items wilt verwijderen zonder te vragen, geeft u de parameter Recurse op:

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Als u alle items binnen HKCU:\CurrentVersion maar niet HKCU:\CurrentVersion zelf wilt verwijderen, kunt u in plaats daarvan het volgende gebruiken:

Remove-Item -Path HKCU:\CurrentVersion\* -Recurse