Praca z kluczami rejestru

Ponieważ klucze rejestru są elementami dysków 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 Wymuś wyświetlanie ukrytych lub systemowych elementów. 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 Cmd.exe lub ls w powłoce systemu UNIX. Aby pokazać zawarte elementy, należy określić parametr Recurse . Aby wyświetlić listę wszystkich kluczy rejestru w HKCU:programie , użyj następującego polecenia.

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem Może wykonywać złożone funkcje filtrowania za pośrednictwem 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 ma 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 elementu HKCU:\.

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

Jeśli zbadasz ten nowy klucz w edytorze rejestru lub przy użyciu polecenia Get-ChildItem, zauważysz, że nie masz kopii zawartych podklucze 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.exeobiekty , regini.exe, regedit.exei COM, które obsługują edycję rejestru, takie jak WScript.Shell i klasa WMI StdRegProv, mogą być używane z poziomu Windows 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 trzeba 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 będą dyskretnie usuwać elementy:

Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'

Usuwanie wszystkich kluczy w ramach określonego klucza

Możesz usunąć zawarte elementy przy użyciu polecenia Remove-Item, ale zostanie wyświetlony monit o potwierdzenie usunięcia, jeśli element zawiera cokolwiek innego. 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 w obrębie HKCU:\CurrentVersion elementu , ale nie HKCU:\CurrentVersion w sobie, możesz zamiast tego użyć:

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