Arbeta med registernycklar

Det här exemplet gäller endast för Windows-plattformar.

Eftersom registernycklar är objekt på PowerShell-enheter är det mycket likt att arbeta med filer och mappar. En viktig skillnad är att varje objekt på en registerbaserad PowerShell-enhet är en container, precis som en mapp på en filsystemenhet. Registerposter och deras associerade värden är dock egenskaper för objekten, inte distinkta objekt.

Visa en lista över alla undernycklar i en registernyckel

Du kan visa alla objekt direkt i en registernyckel med hjälp av Get-ChildItem. Lägg till den valfria Force-parametern för att visa dolda objekt eller systemobjekt. Det här kommandot visar till exempel objekten direkt i PowerShell-enheten HKCU:, vilket motsvarar HKEY_CURRENT_USER registerdatafilen:

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

Det här är nycklarna på den översta nivån som visas under HKEY_CURRENT_USER i Registereditorn (regedit.exe).

Du kan också ange den här registersökvägen genom att ange registerproviderns namn följt av ::. Registerleverantörens fullständiga namn är Microsoft.PowerShell.Core\Registry, men detta kan förkortas till bara Registry. Något av följande kommandon visar innehållet direkt under HKCU:.

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:

Dessa kommandon visar bara de direkt inneslutna objekten, ungefär som att använda DIR i cmd.exe eller ls i ett UNIX-gränssnitt. Om du vill visa inneslutna objekt måste du ange parametern Recurse . Om du vill visa en lista över alla registernycklar i HKCU:använder du följande kommando.

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem kan utföra komplexa filtreringsfunktioner via parametrarna Path, Filter, Include och Exclude , men dessa parametrar baseras vanligtvis bara på namn. Du kan utföra komplex filtrering baserat på andra egenskaper för objekt med hjälp av cmdleten Where-Object . Följande kommando hittar alla nycklar inom HKCU:\Software som inte har fler än en undernyckel och som också har exakt fyra värden:

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

Kopiera nycklar

Kopieringen är klar med Copy-Item. I följande exempel kopieras undernyckeln CurrentVersionHKLM:\SOFTWARE\Microsoft\Windows\ för och alla dess egenskaper till HKCU:\.

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

Om du undersöker den här nya nyckeln i registereditorn eller med hjälp av Get-ChildItemmärker du att du inte har kopior av de inneslutna undernycklarna på den nya platsen. För att kunna kopiera allt innehåll i en container måste du ange parametern Recurse . Om du vill göra föregående kopieringskommando rekursivt använder du det här kommandot:

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

Du kan fortfarande använda andra verktyg som du redan har tillgängliga för att utföra filsystemkopior. Alla verktyg för registerredigering, inklusive reg.exe, regini.exe, regedit.exeoch COM-objekt som stöder registerredigering, till exempel WScript.Shell och WMI:s StdRegProv-klass , kan användas inifrån PowerShell.

Skapa nycklar

Det är enklare att skapa nya nycklar i registret än att skapa ett nytt objekt i ett filsystem. Eftersom alla registernycklar är containrar behöver du inte ange objekttypen. Ange bara en explicit sökväg, till exempel:

New-Item -Path HKCU:\Software_DeleteMe

Du kan också använda en providerbaserad sökväg för att ange en nyckel:

New-Item -Path Registry::HKCU\Software_DeleteMe

Ta bort nycklar

Att ta bort objekt är i stort sett detsamma för alla leverantörer. Följande kommandon tar tyst bort objekt:

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

Ta bort alla nycklar under en specifik nyckel

Du kan ta bort inneslutna objekt med hjälp av Remove-Item, men du uppmanas att bekräfta borttagningen om objektet innehåller något annat. Om vi till exempel försöker ta bort undernyckeln HKCU:\CurrentVersion som vi skapade ser vi följande:

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"):

Om du vill ta bort inneslutna objekt utan att fråga anger du parametern Recurse :

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Om du vill ta bort alla objekt inom HKCU:\CurrentVersion men inte HKCU:\CurrentVersion sig själv kan du i stället använda:

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