Arbeta med registernycklar
Eftersom registernycklar är objekt på PowerShell-enheter fungerar det ungefär som 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 för 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: , som motsvarar HKEY_CURRENT_USER registreringsdatafilen:
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 de nycklar 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 :: . Registerproviderns fullständiga namn är Microsoft.PowerShell.Core\Registry , men det 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 listar endast direkt inneslutna objekt, ungefär som att använda DIR iCmd.exe eller i ls ett UNIX gränssnitt. Om du vill visa inneslutna objekt måste du ange parametern Recurse. Om du vill visa en lista över alla HKCU: registernycklar i 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 Where-Object cmdleten . Följande kommando hittar alla nycklar i 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 görs med Copy-Item . I följande exempel CurrentVersion kopieras undernyckeln 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 ser du att du inte har kopior av de inneslutna Get-ChildItem 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 det föregående kopieringskommandot 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 filsystemskopior. Alla redigeringsverktyg för registret, inklusive , , och COM-objekt som stöder redigering av registret, till exempel reg.exe regini.exe regedit.exe WScript.Shell och WMI:s StdRegProv-klass kan användas Windows 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. du bara ange 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 , men du uppmanas Remove-Item att bekräfta borttagningen om objektet innehåller något annat. Om vi till exempel försöker ta bort den HKCU:\CurrentVersion undernyckel 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 i HKCU:\CurrentVersion men inte sig själv kan du i stället HKCU:\CurrentVersion använda:
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse