Поскольку записи реестра являются свойствами разделов, а потому не могут просматриваться напрямую, при работе с ними нужен немного другой подход.
Получение списка записей реестра
Существует много разных способов просмотра записей реестра. Простейшим способом является получение имен свойств, связанных с разделом. Например, для просмотра имен записей раздела реестра 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