Praca z wpisami rejestru

Ponieważ wpisy rejestru są właściwościami kluczy i, w związku z tym, nie można przeglądać bezpośrednio, musimy podjąć nieco inne podejście podczas pracy z nimi.

Wyświetlanie listy wpisów rejestru

Istnieje wiele różnych sposobów badania wpisów rejestru. Najprostszym sposobem jest pobranie nazw właściwości skojarzonych z kluczem. Aby na przykład wyświetlić nazwy wpisów w kluczu HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersionrejestru , użyj polecenia Get-Item. Klucze rejestru mają właściwość o ogólnej nazwie "Właściwość", która jest listą wpisów rejestru w kluczu. Następujące polecenie wybiera właściwość Property i rozwija elementy, aby były wyświetlane na liście:

Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
  Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

Aby wyświetlić wpisy rejestru w bardziej czytelnym formularzu, użyj polecenia Get-ItemProperty:

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows
PSChildName         : CurrentVersion
PSDrive             : HKLM
PSProvider          : Microsoft.PowerShell.Core\Registry
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
CommonFilesDir      : C:\Program Files\Common Files
ProductId           : 76487-338-1167776-22465
WallPaperDir        : C:\WINDOWS\Web\Wallpaper
MediaPath           : C:\WINDOWS\Media
ProgramFilesPath    : C:\Program Files
PF_AccessoriesName  : Accessories
(default)           :

Właściwości związane z Windows PowerShell klucza mają prefiks "PS", takie jak PSPath, PSParentPath, PSChildName i PSProvider.

Możesz użyć *.* notacji do odwoływania się do bieżącej lokalizacji. Możesz Set-Location najpierw zmienić kontener rejestru CurrentVersion na:

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

Alternatywnie możesz użyć wbudowanej usługi HKLM PSDrive z poleceniem Set-Location:

Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion

Następnie możesz użyć *.* notacji dla bieżącej lokalizacji, aby wyświetlić listę właściwości bez określania pełnej ścieżki:

Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

Rozszerzenie ścieżki działa tak samo jak w systemie plików, więc z tej lokalizacji można uzyskać listę ItemProperty dla HKLM:\SOFTWARE\Microsoft\Windows\Help polecenia za pomocą polecenia Get-ItemProperty -Path ..\Help.

Uzyskiwanie pojedynczego wpisu rejestru

Jeśli chcesz pobrać określony wpis w kluczu rejestru, możesz użyć jednej z kilku możliwych metod. W tym przykładzie znajduje wartość elementu DevicePath w pliku HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Za pomocą polecenia Get-ItemPropertyużyj parametru Ścieżka , aby określić nazwę klucza i parametr Name , aby określić nazwę wpisu DevicePath .

Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry
DevicePath   : C:\WINDOWS\inf

To polecenie zwraca standardowe właściwości Windows PowerShell oraz właściwość DevicePath.

Uwaga

Mimo że Get-ItemProperty ma parametry Filter, Include i Exclude , nie mogą być używane do filtrowania według nazwy właściwości. Te parametry odnoszą się do kluczy rejestru, które są ścieżkami elementów, a nie wpisami rejestru, które są właściwościami elementu.

Inną opcją jest użycie narzędzia wiersza polecenia Reg.exe. Aby uzyskać pomoc dotyczącą reg.exe, wpisz reg.exe /? w wierszu polecenia. Aby znaleźć wpis DevicePath, użyj reg.exe, jak pokazano w poniższym poleceniu:

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

Można również użyć obiektu COM programu WshShell , aby znaleźć niektóre wpisy rejestru, chociaż ta metoda nie działa z dużymi danymi binarnymi lub z nazwami wpisów rejestru, które zawierają znaki, takie jak ukośnik odwrotny (\). Dołącz nazwę właściwości do ścieżki elementu z separatorem \ :

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

Ustawianie pojedynczego wpisu rejestru

Jeśli chcesz zmienić określony wpis w kluczu rejestru, możesz użyć jednej z kilku możliwych metod. W tym przykładzie zmodyfikowano wpis Ścieżka w obszarze HKEY_CURRENT_USER\Environment. Wpis Ścieżka określa, gdzie można znaleźć pliki wykonywalne.

  1. Pobierz bieżącą wartość wpisu Ścieżka przy użyciu polecenia Get-ItemProperty.
  2. Dodaj nową wartość, oddzielając ją elementem ;.
  3. Użyj Set-ItemProperty polecenia z określonym kluczem, nazwą wpisu i wartością, aby zmodyfikować wpis rejestru.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

Uwaga

Mimo że Set-ItemProperty ma parametry Filter, Include i Exclude , nie mogą być używane do filtrowania według nazwy właściwości. Te parametry odnoszą się do kluczy rejestru — które są ścieżkami elementów — a nie wpisami rejestru — które są właściwościami elementu.

Inną opcją jest użycie narzędzia wiersza polecenia Reg.exe. Aby uzyskać pomoc dotyczącą reg.exe, wpisz reg.exe /? w wierszu polecenia.

Poniższy przykład zmienia wpis Ścieżka , usuwając ścieżkę dodaną w powyższym przykładzie. Get-ItemProperty Jest nadal używany do pobierania bieżącej wartości, aby uniknąć konieczności analizowania ciągu zwróconego z reg query. Metody SubString i LastIndexOf służą do pobierania ostatniej ścieżki dodanej do wpisu Ścieżka .

$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.

Tworzenie nowych wpisów rejestru

Aby dodać nowy wpis o nazwie "PowerShellPath" do klucza CurrentVersion , użyj polecenia New-ItemProperty ze ścieżką do klucza, nazwą wpisu i wartością wpisu. W tym przykładzie użyjemy wartości zmiennej $PSHomeWindows PowerShell , która przechowuje ścieżkę do katalogu instalacyjnego dla Windows PowerShell.

Nowy wpis można dodać do klucza przy użyciu następującego polecenia, a polecenie również zwraca informacje o nowym wpisie:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

Właściwość PropertyType musi być nazwą elementu członkowskiego wyliczenia Microsoft.Win32.RegistryValueKind z poniższej tabeli:

Wartość PropertyType Znaczenie
Binarne Dane binarne
DWord Liczba, która jest prawidłową liczbą UInt32
ExpandString Ciąg, który może zawierać zmienne środowiskowe, które są dynamicznie rozwijane
MultiString Ciąg wielowierszowy
Ciąg Dowolna wartość ciągu
QWord 8 bajtów danych binarnych

Uwaga

Wpis rejestru można dodać do wielu lokalizacji, określając tablicę wartości parametru Path :

New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
  -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion

Możesz również zastąpić istniejącą wartość wpisu rejestru, dodając parametr Force do dowolnego New-ItemProperty polecenia.

Zmienianie nazw wpisów rejestru

Aby zmienić nazwę wpisu programu PowerShellPath na "PSHome", użyj polecenia Rename-ItemProperty:

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

Aby wyświetlić zmienioną nazwę wartości, dodaj parametr PassThru do polecenia .

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

Usuwanie wpisów rejestru

Aby usunąć wpisy rejestru PSHome i PowerShellPath, użyj polecenia Remove-ItemProperty:

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath