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-Itemfunkce . 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.exeobjektů , regini.exe, regedit.exea 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