Praca z wpisami rejestru

Ten przykład dotyczy tylko platform systemu Windows.

Ponieważ wpisy rejestru są właściwościami kluczy, a w związku z tym nie można ich przeglądać bezpośrednio, musimy wykonać 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
ProgramFilesDir          : C:\Program Files
CommonFilesDir           : C:\Program Files\Common Files
ProgramFilesDir (x86)    : C:\Program Files (x86)
CommonFilesDir (x86)     : C:\Program Files (x86)\Common Files
CommonW6432Dir           : C:\Program Files\Common Files
DevicePath               : C:\WINDOWS\inf
MediaPathUnexpanded      : C:\WINDOWS\Media
ProgramFilesPath         : C:\Program Files
ProgramW6432Dir          : C:\Program Files
SM_ConfigureProgramsName : Set Program Access and Defaults
SM_GamesName             : Games
PSPath                   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows\CurrentVersion
PSParentPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows
PSChildName              : CurrentVersion
PSDrive                  : HKLM
PSProvider               : Microsoft.PowerShell.Core\Registry

Właściwości związane z programem Windows PowerShell dla klucza są poprzedzone ciągiem "PS", takimi jak PSPath, PSParentPath, PSChildName i PSProvider.

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

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

Alternatywnie możesz użyć wbudowanej HKLM: usługi PSDrive z usługą 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 na HKLM:\SOFTWARE\Microsoft\Windows\Help potrzeby używania polecenia Get-ItemProperty -Path ..\Help.

Pobieranie pojedynczego wpisu rejestru

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

Za pomocą Get-ItemPropertypolecenia uż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
DevicePath   : C:\WINDOWS\inf
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

To polecenie zwraca standardowe właściwości programu Windows PowerShell, a także 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ą reg.exe jest użycie narzędzia wiersza polecenia. Aby uzyskać pomoc dotyczącą reg.exepolecenia , wpisz reg.exe /? polecenie w wierszu polecenia. Aby znaleźć wpis DevicePath , użyj polecenia 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ć jednego 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żywane 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 z New-ItemProperty ścieżką do klucza, nazwą wpisu i wartością wpisu. W tym przykładzie użyjemy wartości zmiennej $PSHomeprogramu Windows PowerShell, która przechowuje ścieżkę do katalogu instalacyjnego programu Windows PowerShell.

Nowy wpis można dodać do klucza przy użyciu następującego polecenia, a polecenie zwraca również 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:

WłaściwośćType, wartość Znaczenie
Plik binarny Dane binarne
DWord Liczba prawidłowa UInt32
ExpandString Ciąg, który może zawierać zmienne środowiskowe, które są dynamicznie rozwijane
MultiString Ciąg wielowierszowy
String Dowolna wartość ciągu
QWord 8 bajtów danych binarnych

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ć wstępnie 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