Práce s klíči registru
Tato ukázka platí jenom pro platformy Windows.
Protože klíče registru jsou položky na jednotkách PowerShellu, je práce s nimi velmi podobná práci se soubory a složkami. Jedním z důležitých rozdílů je, že každá položka na jednotce PowerShellu založená na registru je kontejner, stejně jako složka na jednotce systému souborů. Položky registru a jejich přidružené hodnoty jsou však vlastnosti položek, nikoli jedinečné položky.
Výpis všech podklíčů klíče registru
Všechny položky můžete zobrazit přímo v klíči registru pomocí Get-ChildItem
. Přidejte volitelný parametr Force pro zobrazení skrytých nebo systémových položek. Tento příkaz například zobrazí položky přímo v jednotce HKCU:
PowerShellu, která odpovídá podregistru HKEY_CURRENT_USER
registru:
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
Jedná se o klíče nejvyšší úrovně, které jsou viditelné HKEY_CURRENT_USER
v Editoru registru (regedit.exe
).
Tuto cestu registru můžete zadat také zadáním názvu zprostředkovatele registru následovaného ::
. Úplný název poskytovatele registru je Microsoft.PowerShell.Core\Registry
, ale lze ho zkrátit na pouze Registry
. Jakýkoli z následujících příkazů zobrazí obsah přímo v části 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:
Tyto příkazy obsahují jenom přímo obsažené položky, podobně jako použití DIR
v cmd.exe
prostředí systém UNIX nebo ls
v prostředí systém UNIX. Pokud chcete zobrazit obsažené položky, musíte zadat parametr Recurse . K výpisu HKCU:
všech klíčů registru použijte následující příkaz.
Get-ChildItem -Path HKCU:\ -Recurse
Get-ChildItem
může provádět složité možnosti filtrování prostřednictvím parametrů Cesta, Filtr, Zahrnout a Vyloučit , ale tyto parametry jsou obvykle založeny pouze na názvu. Pomocí rutiny Where-Object
můžete provádět složité filtrování na základě jiných vlastností položek.
Následující příkaz najde všechny klíče, HKCU:\Software
které nemají více než jeden podklíč a mají také přesně čtyři hodnoty:
Get-ChildItem -Path HKCU:\Software -Recurse |
Where-Object {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }
Kopírování klíčů
Kopírování se provádí pomocí Copy-Item
funkce . Následující příklad zkopíruje CurrentVersion
podklíč a HKLM:\SOFTWARE\Microsoft\Windows\
všechny jeho vlastnosti do HKCU:\
.
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:
Pokud tento nový klíč prozkoumáte v editoru registru nebo použijete Get-ChildItem
, všimněte si, že v novém umístění nemáte kopie obsažených podklíčů. Pokud chcete zkopírovat veškerý obsah kontejneru, musíte zadat parametr Recurse . Pokud chcete, aby předchozí příkaz kopírování rekurzivní, použili byste tento příkaz:
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse
Stále můžete použít další nástroje, které už máte k dispozici k provádění kopií systému souborů. Všechny nástroje pro úpravy registru , včetně reg.exe
objektů , regini.exe
, regedit.exe
a COM, které podporují úpravy registru, jako je WScript.Shell a stdRegProv třída WMI, je možné použít z PowerShellu.
Vytváření klíčů
Vytváření nových klíčů v registru je jednodušší než vytvoření nové položky v systému souborů. Protože všechny klíče registru jsou kontejnery, nemusíte zadávat typ položky. Stačí zadat explicitní cestu, například:
New-Item -Path HKCU:\Software_DeleteMe
Klíč můžete zadat také pomocí cesty založené na poskytovateli:
New-Item -Path Registry::HKCU\Software_DeleteMe
Odstranění klíčů
Odstranění položek je v podstatě stejné pro všechny poskytovatele. Následující příkazy bezobslužně odeberou položky:
Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'
Odebrání všech klíčů pod konkrétním klíčem
Obsažené položky můžete odebrat pomocí Remove-Item
, ale zobrazí se výzva k potvrzení odebrání, pokud položka obsahuje něco jiného. Pokud se například pokusíme odstranit HKCU:\CurrentVersion
podklíč, který jsme vytvořili, uvidíme toto:
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"):
Pokud chcete odstranit obsažené položky bez výzvy, zadejte parametr Recurse :
Remove-Item -Path HKCU:\CurrentVersion -Recurse
Pokud chcete odebrat všechny položky uvnitř HKCU:\CurrentVersion
, ale ne HKCU:\CurrentVersion
v sobě, můžete místo toho použít:
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse