Praca z wpisami rejestruWorking with Registry Entries

Ponieważ wpisy rejestru są właściwościami kluczy i, w związku z czym nie można ich przeglądać bezpośrednio, musimy nieco inaczej rozróżnić podczas pracy z nimi.Because registry entries are properties of keys and, as such, cannot be directly browsed, we need to take a slightly different approach when working with them.

Wyświetlanie listy wpisów rejestruListing Registry Entries

Istnieje wiele różnych sposobów badania wpisów rejestru.There are many different ways to examine registry entries. Najprostszym sposobem jest uzyskanie nazw właściwości skojarzonych z kluczem.The simplest way is to get the property names associated with a key. Na przykład, aby wyświetlić nazwy wpisów w kluczu rejestru HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion , użyj Get-Item .For example, to see the names of the entries in the registry key HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, use Get-Item. Klucze rejestru mają właściwość o nazwie ogólnej "Property", która jest listą wpisów rejestru w kluczu.Registry keys have a property with the generic name of "Property" that is a list of registry entries in the key. Następujące polecenie wybiera Właściwość właściwości i rozszerza elementy tak, aby były wyświetlane na liście:The following command selects the Property property and expands the items so that they are displayed in a list:

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 czytelny sposób, użyj Get-ItemProperty :To view the registry entries in a more readable form, use 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)           :

We właściwościach związanych z programem Windows PowerShell dla klucza są naprawione wszystkie prefiksy "PS", takie jak element pspath ma, PSParentPath, PSChildNamei PSProvider.The Windows PowerShell-related properties for the key are all prefixed with "PS", such as PSPath, PSParentPath, PSChildName, and PSProvider.

Można użyć *.* notacji do odwoływania się do bieżącej lokalizacji.You can use the *.* notation for referring to the current location. Możesz użyć, Set-Location Aby najpierw przejść do kontenera rejestru CurrentVersion :You can use Set-Location to change to the CurrentVersion registry container first:

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

Alternatywnie możesz użyć wbudowanej PSDrive HKLM z Set-Location :Alternatively, you can use the built-in HKLM PSDrive with Set-Location:

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

Następnie można użyć *.* notacji dla bieżącej lokalizacji, aby wyświetlić listę właściwości bez określania pełnej ścieżki:You can then use the *.* notation for the current location to list the properties without specifying a full path:

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, dlatego z tej lokalizacji można uzyskać listę zmieniona właściwość elementu dla programu przy użyciu programu HKLM:\SOFTWARE\Microsoft\Windows\Help Get-ItemProperty -Path ..\Help .Path expansion works the same as it does within the file system, so from this location you can get the ItemProperty listing for HKLM:\SOFTWARE\Microsoft\Windows\Help by using Get-ItemProperty -Path ..\Help.

Pobieranie pojedynczego wpisu rejestruGetting a Single Registry Entry

Jeśli chcesz pobrać konkretny wpis w kluczu rejestru, możesz użyć jednej z kilku możliwych metod.If you want to retrieve a specific entry in a registry key, you can use one of several possible approaches. Ten przykład umożliwia znalezienie wartości DevicePath w HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion .This example finds the value of DevicePath in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Za pomocą Get-ItemProperty , użyj parametru Path , aby określić nazwę klucza i parametr name , aby określić nazwę wpisu DevicePath .Using Get-ItemProperty, use the Path parameter to specify the name of the key, and the Name parameter to specify the name of the DevicePath entry.

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 programu Windows PowerShell, a także właściwość DevicePath .This command returns the standard Windows PowerShell properties as well as the DevicePath property.

Uwaga

Chociaż Get-ItemProperty zawiera parametry Filter, includei exclude , nie można ich używać do filtrowania według nazwy właściwości.Although Get-ItemProperty has Filter, Include, and Exclude parameters, they cannot be used to filter by property name. Te parametry odnoszą się do kluczy rejestru, które są ścieżkami elementów, a nie wpisów rejestru, które są właściwościami elementu.These parameters refer to registry keys, which are item paths and not registry entries, which are item properties.

Innym rozwiązaniem jest użycie Reg.exe narzędzia wiersza polecenia.Another option is to use the Reg.exe command line tool. Aby uzyskać pomoc dotyczącą reg.exe, wpisz reg.exe /? w wierszu polecenia.For help with reg.exe, type reg.exe /? at a command prompt. Aby znaleźć wpis DevicePath, użyj reg.exe, jak pokazano w następującym poleceniu:To find the DevicePath entry, use reg.exe as shown in the following command:

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 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 " \ ".You can also use the WshShell COM object as well to find some registry entries, although this method does not work with large binary data or with registry entry names that include characters such as "\"). Dołącz nazwę właściwości do ścieżki elementu z \ separatorem:Append the property name to the item path with a \ separator:

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

Ustawianie pojedynczego wpisu rejestruSetting a Single Registry Entry

Jeśli chcesz zmienić konkretny wpis w kluczu rejestru, możesz użyć jednej z kilku możliwych metod.If you want to change a specific entry in a registry key, you can use one of several possible approaches. Ten przykład modyfikuje wpis ścieżki w obszarze HKEY_CURRENT_USER\Environment .This example modifies the Path entry under HKEY_CURRENT_USER\Environment. Wpis ścieżki określa miejsce, w którym mają znajdować się pliki wykonywalne.The Path entry specifies where to find executable files.

  1. Pobierz bieżącą wartość wpisu ścieżki przy użyciu Get-ItemProperty .Retrieve the current value of the Path entry using Get-ItemProperty.
  2. Dodaj nową wartość, oddzielając ją od ; .Add the new value, separating it with a ;.
  3. Set-ItemPropertyAby zmodyfikować wpis rejestru, użyj z określonym kluczem, nazwą wpisu i wartością.Use Set-ItemProperty with the specified key, entry name, and value to modify the registry entry.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

Uwaga

Chociaż Set-ItemProperty zawiera parametry Filter, includei exclude , nie można ich używać do filtrowania według nazwy właściwości.Although Set-ItemProperty has Filter, Include, and Exclude parameters, they cannot be used to filter by property name. Te parametry odnoszą się do kluczy rejestru, które są ścieżkami elementów, a nie wpisów rejestru, które są właściwościami elementu.These parameters refer to registry keys—which are item paths—and not registry entries—which are item properties.

Innym rozwiązaniem jest użycie Reg.exe narzędzia wiersza polecenia.Another option is to use the Reg.exe command line tool. Aby uzyskać pomoc dotyczącą reg.exe, wpisz reg.exe/?For help with reg.exe, type reg.exe /? w wierszu polecenia.at a command prompt.

Poniższy przykład zmienia wpis ścieżki przez usunięcie ścieżki dodanej w powyższym przykładzie.The following example changes the Path entry by removing the path added in the example above. Get-ItemProperty jest nadal używany do pobierania bieżącej wartości, aby uniknąć konieczności analizowania ciągu zwróconego z reg query .Get-ItemProperty is still used to retrieve the current value to avoid having to parse the string returned from reg query. Metody substring i LastIndexOf są używane do pobierania ostatniej ścieżki dodanej do wpisu Path .The SubString and LastIndexOf methods are used to retrieve the last path added to the Path entry.

$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 rejestruCreating New Registry Entries

Aby dodać nowy wpis o nazwie "PowerShellPath" do klucza CurrentVersion , użyj New-ItemProperty ścieżki do klucza, nazwy wpisu i wartości wpisu.To add a new entry named "PowerShellPath" to the CurrentVersion key, use New-ItemProperty with the path to the key, the entry name, and the value of the entry. Na potrzeby tego przykładu zajmiemy się zmienną środowiska Windows PowerShell $PSHome , która przechowuje ścieżkę do katalogu instalacyjnego programu Windows PowerShell.For this example, we will take the value of the Windows PowerShell variable $PSHome, which stores the path to the installation directory for Windows PowerShell.

Nowy wpis można dodać do klucza przy użyciu poniższego polecenia, a polecenie zwraca również informacje o nowym wpisie:You can add the new entry to the key by using the following command, and the command also returns information about the new entry:

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:The PropertyType must be the name of a Microsoft.Win32.RegistryValueKind enumeration member from the following table:

Wartość właściwościtypePropertyType Value ZnaczenieMeaning
BinarneBinary Dane binarneBinary data
DWordDWord Liczba, która jest prawidłowym UInt32A number that is a valid UInt32
ExpandStringExpandString Ciąg, który może zawierać zmienne środowiskowe, które są dynamicznie rozszerzaneA string that can contain environment variables that are dynamically expanded
FixedLengthMultiString Ciąg wielowierszowyA multiline string
StringString Dowolna wartość ciąguAny string value
Wartość QwordQWord 8 bajtów danych binarnych8 bytes of binary data

Uwaga

Można dodać wpis rejestru do wielu lokalizacji, określając tablicę wartości parametru Path :You can add a registry entry to multiple locations by specifying an array of values for the Path parameter:

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.You can also overwrite a pre-existing registry entry value by adding the Force parameter to any New-ItemProperty command.

Zmiana nazw wpisów rejestruRenaming Registry Entries

Aby zmienić nazwę wpisu PowerShellPath na "PSHome", użyj Rename-ItemProperty :To rename the PowerShellPath entry to "PSHome," use Rename-ItemProperty:

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

Aby wyświetlić wartość o zmienionej nazwie, należy dodać do polecenia parametr PassThru .To display the renamed value, add the PassThru parameter to the command.

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

Usuwanie wpisów rejestruDeleting Registry Entries

Aby usunąć wpisy rejestru PSHome i PowerShellPath, użyj Remove-ItemProperty :To delete both the PSHome and PowerShellPath registry entries, use Remove-ItemProperty:

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