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-Item
pří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-ChildItem
pří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.exe
objektů , regini.exe
regedit.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