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 CurrentVersion
HKLM:\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-ChildItem
mä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.exe
och 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