Práce s klíči registru

Tato ukázka se vztahuje pouze na platformy Windows.

Vzhledem k tomu, ž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ásadním rozdílem 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ě zobrazené v editoru HKEY_CURRENT_USER registru (regedit.exe).

Tuto cestu k registru můžete zadat také tak, že zadáte název zprostředkovatele registru a potom ::. Úplný název poskytovatele registru je Microsoft.PowerShell.Core\Registry, ale můžete ho zkrátit na .Registry Kterýkoli z následujících příkazů zobrazí seznam obsahu 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í pouze seznam přímo obsažených položek, podobně jako použití DIR v cmd.exe prostředí systému UNIX nebo ls v prostředí systému UNIX. Pokud chcete zobrazit položky obsažené, musíte zadat parametr Recurse . K zobrazení seznamu všech klíčů registru v HKCU:nástroji použijte následující příkaz.

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem může provádět komplexní funkce filtrování prostřednictvím parametrů Path, Filter, Include a Exclude , ale tyto parametry jsou obvykle založeny pouze na názvu. Pomocí rutiny můžete provádět komplexní filtrování na základě jiných vlastností položek Where-Object . Následující příkaz najde všechny klíče uvnitř 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-Itempříkazu . Následující příklad zkopíruje CurrentVersion podklíč HKLM:\SOFTWARE\Microsoft\Windows\ a 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 pomocí Get-ChildItempříkazu , zjistíte, ž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 copy byl rekurzivní, použili byste tento příkaz:

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

K provádění kopií systému souborů můžete dál používat jiné nástroje, které už máte k dispozici. Všechny nástroje pro úpravu registru– včetně reg.exeobjektů , regini.exeregedit.exe, a COM, které podporují úpravy registru, jako je WScript.Shell a třída StdRegProv služby WMI, je možné použít v prostředí PowerShell.

Vytváření klíčů

Vytvoření nových klíčů v registru je jednodušší než vytvoření nové položky v systému souborů. Vzhledem k tomu, ž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

K zadání klíče můžete také použít cestu založenou na poskytovateli:

New-Item -Path Registry::HKCU\Software_DeleteMe

Odstraňují se klíče

Odstranění položek je pro všechny zprostředkovatele v podstatě stejné. 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

Položky, které obsahují, můžete odebrat pomocí Remove-Item, ale pokud položka obsahuje něco jiného, zobrazí se výzva k potvrzení odebrání. Pokud se například pokusíme odstranit HKCU:\CurrentVersion vytvořený podklíč, 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 položky obsažené bez zobrazení výzvy, zadejte parametr Recurse :

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Pokud byste chtěli odebrat všechny položky v rámci HKCU:\CurrentVersion , ale ne HKCU:\CurrentVersion samotné, mohli byste místo toho použít:

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