Поскольку записи реестра являются свойствами разделов, а потому не могут просматриваться напрямую, при работе с ними нужен немного другой подход.

Получение списка записей реестра

Существует много разных способов просмотра записей реестра. Простейшим способом является получение имен свойств, связанных с разделом. Например, для просмотра имен записей раздела реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion используйте командлет Get-Item. Разделы реестра имеют свойство с универсальным именем "Property", содержащее список записей реестра в данном разделе. Следующая команда выбирает свойство Property и разворачивает элементы для отображения в виде списка:

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

Для просмотра записей реестра в более удобной для чтения форме воспользуйтесь командлетом Get-ItemProperty:

PS> 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)           :

Все свойства раздела, относящиеся к Windows PowerShell, имеют префикс "PS", например, PSPath, PSParentPath, PSChildName и PSProvider.

При ссылке на текущее положение можно использовать обозначение .. Можно воспользоваться командлетом Set-Location, чтобы предварительно перейти к контейнеру реестра CurrentVersion:

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

Другой способ состоит в использовании встроенного диска HKLM в качестве параметра командлета Set-Location:

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

После этого для обозначения текущего положения можно использовать знак . и не указывать полный путь при получении списка свойств:

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

Расширение пути производится так же, как и в файловой системе, то есть из этого положения можно вывести свойства ItemProperty для раздела HKLM:\SOFTWARE\Microsoft\Windows\Help с помощью Get-ItemProperty -Path ..\Help.

Извлечение отдельной записи реестра

Если необходимо извлечь конкретную запись из раздела реестра, можно следовать одному из нескольких возможных подходов. В этом примере определяется значение DevicePath в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

При использовании командлета Get-ItemProperty нужно использовать параметр Path для указания имени раздела и параметр Name для указания имени записи DevicePath.

PS> 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

Эта команда возвращает как стандартные свойства Windows PowerShell, так и свойство DevicePath.

Примечание.

Командлет Get-ItemProperty имеет параметры Filter, Include и Exclude, но их нельзя использовать для фильтрации по имени свойств. Эти параметры относятся к разделу реестра (то есть путям к элементу), а не к записям реестра, которые являются свойствами элемента.

Другой способ состоит в использовании средства командной строки Reg.exe. Дополнительные сведения о средстве reg.exe можно получить, набрав reg.exe /? в командной строке. Чтобы найти запись DevicePath, воспользуйтесь reg.exe, как показано в следующей команде:

PS> 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

Для нахождения некоторых записей в реестре можно также использовать объект WshShell COM, однако этот метод не работает с большими блоками двоичных данных, а также в случаях, когда имена записей в реестре включают специальные знаки, такие как "\". Имя свойства добавляется к пути к элементу при помощи разделителя "\":

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

Создание новых записей в реестре

Для добавления новой записи с именем "PowerShellPath" в раздел CurrentVersion воспользуйтесь командлетом New-ItemProperty, указав путь к разделу, имя записи и значение записи. В данном примере используется значение переменной Windows PowerShell $PSHome, которая хранит путь к каталогу установки Windows PowerShell.

Новую запись к разделу можно добавить при помощи следующей команды, которая также возвращает сведения о новой записи:

PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome


PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

Параметр PropertyType должен содержать имя члена перечисления Microsoft.Win32.RegistryValueKind из следующей таблицы:

Значение PropertyType Значение

Binary

Двоичные данные

DWord

Допустимое число типа UInt32

ExpandString

Строка, которая может содержать динамически увеличивающиеся переменные среды

MultiString

Многострочный текст

String

Любое строковое значение

QWord

8 байт двоичных данных

Примечание.

Можно добавить запись в несколько положений в реестре, указав в качестве параметра Path массив значений:

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

Можно также переписать ранее существовавшую запись в реестре, добавив в любую команду New-ItemProperty параметр Force.

Переименование записей в реестре

Чтобы переименовать запись PowerShellPath в PSHome, следует использовать команду Rename-ItemProperty:

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

Для отображения переименованного значения нужно добавить в команду параметр PassThru.

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

Удаление записей в реестре

Для удаления записей в реестре PSHome и PowerShellPath следует воспользоваться командлетом Remove-ItemProperty:

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




Содержание