Praca z kluczami rejestru
Ten przykład dotyczy tylko platform systemu Windows.
Ponieważ klucze rejestru są elementami na dyskach programu PowerShell, praca z nimi jest bardzo podobna do pracy z plikami i folderami. Jedną z krytycznych różnic jest to, że każdy element na dysku programu PowerShell opartym na rejestrze jest kontenerem, podobnie jak folder na dysku systemu plików. Jednak wpisy rejestru i skojarzone z nimi wartości są właściwościami elementów, a nie odrębnymi elementami.
Wyświetlanie listy wszystkich podklucze klucza rejestru
Wszystkie elementy można wyświetlić bezpośrednio w kluczu rejestru przy użyciu polecenia Get-ChildItem
. Dodaj opcjonalny parametr Force , aby wyświetlić ukryte lub systemowe elementy. Na przykład to polecenie wyświetla elementy bezpośrednio na dysku HKCU:
programu PowerShell, który odpowiada HKEY_CURRENT_USER
gałęzi rejestru:
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
Są to klucze najwyższego poziomu widoczne HKEY_CURRENT_USER
w edytorze rejestru (regedit.exe
).
Tę ścieżkę rejestru można również określić, określając nazwę dostawcy rejestru, a następnie .::
Pełna nazwa dostawcy rejestru to Microsoft.PowerShell.Core\Registry
, ale można to skrócić do tylko Registry
. Dowolne z poniższych poleceń spowoduje wyświetlenie zawartości bezpośrednio w obszarze 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:
Te polecenia zawierają tylko bezpośrednio zawarte elementy, podobnie jak DIR
w powłoce system UNIX lub ls
w cmd.exe
powłoce system UNIX. Aby pokazać zawarte elementy, należy określić parametr Recurse . Aby wyświetlić listę wszystkich kluczy rejestru w programie HKCU:
, użyj następującego polecenia.
Get-ChildItem -Path HKCU:\ -Recurse
Get-ChildItem
może wykonywać złożone funkcje filtrowania za pomocą parametrów Path, Filter, Include i Exclude , ale te parametry są zwykle oparte tylko na nazwie. Za pomocą Where-Object
polecenia cmdlet można wykonywać złożone filtrowanie na podstawie innych właściwości elementów.
Następujące polecenie znajduje wszystkie klucze w obrębie HKCU:\Software
, które nie mają więcej niż jednego podklucza, a także mają dokładnie cztery wartości:
Get-ChildItem -Path HKCU:\Software -Recurse |
Where-Object {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }
Kopiowanie kluczy
Kopiowanie odbywa się za pomocą polecenia Copy-Item
. Poniższy przykład kopiuje CurrentVersion
podklucz HKLM:\SOFTWARE\Microsoft\Windows\
i wszystkie jego właściwości do HKCU:\
.
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:
Jeśli zbadasz ten nowy klucz w edytorze rejestru lub użyjesz Get-ChildItem
polecenia , zauważysz, że nie masz kopii zawartych podklucza w nowej lokalizacji. Aby skopiować całą zawartość kontenera, należy określić parametr Recurse . Aby wykonać rekursywne poprzednie polecenie kopiowania, użyj następującego polecenia:
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse
Nadal możesz używać innych narzędzi, które są już dostępne do wykonywania kopii systemu plików. Wszystkie narzędzia do edycji rejestru — w tym reg.exe
obiekty , regini.exe
, regedit.exe
i COM, które obsługują edytowanie rejestru, takie jak WScript.Shell i klasa WMI StdRegProv , mogą być używane z poziomu programu PowerShell.
Tworzenie kluczy
Tworzenie nowych kluczy w rejestrze jest prostsze niż tworzenie nowego elementu w systemie plików. Ponieważ wszystkie klucze rejestru są kontenerami, nie musisz określać typu elementu. Wystarczy podać jawną ścieżkę, taką jak:
New-Item -Path HKCU:\Software_DeleteMe
Możesz również użyć ścieżki opartej na dostawcy, aby określić klucz:
New-Item -Path Registry::HKCU\Software_DeleteMe
Usuwanie kluczy
Usuwanie elementów jest zasadniczo takie samo dla wszystkich dostawców. Następujące polecenia w trybie dyskretnym usuwają elementy:
Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'
Usuwanie wszystkich kluczy w określonym kluczu
Możesz usunąć zawarte elementy przy użyciu polecenia Remove-Item
, ale zostanie wyświetlony monit o potwierdzenie usunięcia, jeśli element zawiera inne elementy. Jeśli na przykład spróbujemy usunąć utworzony podklucz HKCU:\CurrentVersion
, zobaczymy następujące elementy:
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"):
Aby usunąć zawarte elementy bez monitowania, określ parametr Recurse :
Remove-Item -Path HKCU:\CurrentVersion -Recurse
Jeśli chcesz usunąć wszystkie elementy, ale nie HKCU:\CurrentVersion
samemuHKCU:\CurrentVersion
, możesz zamiast tego użyć:
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse