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\CurrentVersion
rejestru , 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-ItemProperty
polecenia 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.exe
polecenia , 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.
- Pobierz bieżącą wartość wpisu Ścieżka przy użyciu polecenia
Get-ItemProperty
. - Dodaj nową wartość, oddzielając ją elementem
;
. - 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 $PSHome
programu 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:
$newItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
PropertyType = 'String'
Value = $PSHome
}
New-ItemProperty @newItemPropertySplat
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:
String
— służy do REG_SZ wartości.[System.String]
Przekaż obiekt do parametru Value.ExpandString
— służy do REG_EXPAND_SZ wartości.[System.String]
Przekaż obiekt do parametru Value. Ciąg powinien zawierać niezrozpaczone odwołania do zmiennych środowiskowych, które są rozwinięte po pobraniu wartości.Binary
— służy do REG_BINARY wartości.[System.Byte[]]
Przekaż obiekt do parametru Value.DWord
— służy do REG_DWORD wartości.[System.Int32]
Przekaż obiekt do parametru Value.MultiString
— służy do REG_MULTI_SZ wartości.[System.String[]]
Przekaż obiekt do parametru Value.QWord
— służy do REG_QWORD wartości.[System.Int64]
Przekaż obiekt do parametru Value.
Wpis rejestru można dodać do wielu lokalizacji, określając tablicę wartości parametru Path :
$newItemPropertySplat = @{
Name = 'PowerShellPath'
PropertyType = 'String'
Value = $PSHome
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat
Możesz również zastąpić wstępnie istniejącą wartość wpisu rejestru, dodając parametr Force do dowolnego New-ItemProperty
polecenia.
W poniższych przykładach pokazano, jak utworzyć nowe wpisy rejestru różnych typów. Wartości rejestru są tworzone w nowym kluczu o nazwie MySoftwareKey w obszarze HKEY_CURRENT_USER\Software
. Zmienna $key
jest używana do przechowywania nowego obiektu klucza.
$key = New-Item -Path HKCU:\Software -Name MySoftwareKey
$newItemPropertySplat = @{
Path = $key.PSPath
Name = 'DefaultFolders'
PropertyType = 'MultiString'
Value = 'Home', 'Temp', 'Publish'
}
New-ItemProperty @newItemPropertySplat
DefaultFolders : {Home, Temp, Publish}
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName : MySoftwareKey
PSProvider : Microsoft.PowerShell.Core\Registry
Można użyć właściwości PSPath obiektu klucza w kolejnych poleceniach.
New-ItemProperty -Path $key.PSPath -Name MaxAllowed -PropertyType QWord -Value 1024
MaxAllowed : 1024
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName : MySoftwareKey
PSProvider : Microsoft.PowerShell.Core\Registry
Możesz również przekazać potok $key
, aby New-ItemProperty
dodać wartość do klucza.
$date = Get-Date -Format 'dd-MMM-yyyy'
$newItemPropertySplat = @{
Name = 'BinaryDate'
PropertyType = 'Binary'
Value = ([System.Text.Encoding]::UTF8.GetBytes($date))
}
$key | New-ItemProperty @newItemPropertySplat
BinaryDate : {51, 49, 45, 74…}
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName : MySoftwareKey
PSProvider : Microsoft.PowerShell.Core\Registry
Wyświetlanie zawartości pokaże $key
nowe wpisy.
$key
Hive: HKEY_CURRENT_USER\Software
Name Property
---- --------
MySoftwareKey DefaultFolders : {Home, Temp, Publish}
MaxAllowed : 1024
BinaryDate : {51, 49, 45, 74…}
W poniższym przykładzie przedstawiono typ wartości dla każdego rodzaju wpisu rejestru:
$key.GetValueNames() | Select-Object @{n='ValueName';e={$_}},
@{n='ValueKind';e={$key.GetValueKind($_)}},
@{n='Type';e={$key.GetValue($_).GetType()}},
@{n='Value';e={$key.GetValue($_)}}
ValueName ValueKind Type Value
--------- --------- ---- -----
DefaultFolders MultiString System.String[] {Home, Temp, Publish}
MaxAllowed QWord System.Int64 1024
BinaryDate Binary System.Byte[] {51, 49, 45, 74…}
Zmienianie nazw wpisów rejestru
Aby zmienić nazwę wpisu programu PowerShellPath na "PSHome", użyj polecenia Rename-ItemProperty
:
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat
Aby wyświetlić zmienioną nazwę wartości, dodaj parametr PassThru do polecenia .
$renameItemPropertySplat = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
Name = 'PowerShellPath'
NewName = 'PSHome'
PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat
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