Работа с записями реестра
Этот пример применяется только к платформам Windows.
Так как записи реестра являются свойствами разделов, и, как это, нельзя напрямую просматривать, нам нужно сделать немного другой подход при работе с ними.
Перечисление записей реестра
Существует несколько способов просмотра реестра. Самый простой — получить имена свойств, связанные с разделом. Например, чтобы просмотреть имена записей в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
, используйте Get-Item
. Разделы реестра имеют свойство с универсальным именем "Свойство", который содержит список записей реестра в разделе. Следующая команда выбирает свойство Property и расширяет элементы, чтобы они отображались в списке:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId
Чтобы просмотреть записи реестра в более удобочитаемой форме, используйте 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
Все свойства Windows PowerShell раздела имеют префиксы PS, например PSPath, PSParentPath, PSChildName и PSProvider.
Для создания ссылки на текущее расположение можно использовать нотацию *.*
. Set-Location
можно использовать для изменения значения на контейнер реестра CurrentVersion.
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Кроме того, можно использовать встроенный HKLM:
PSDrive со Set-Location
следующими способами:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Затем можно использовать нотацию .
для текущего расположения, чтобы перечислить свойства без указания полного пути.
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.
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
Эта команда возвращает стандартные свойства Windows PowerShell, а также свойство DevicePath.
Примечание.
Хотя Get-ItemProperty
имеет параметры filter, Include и Exclude , они не могут использоваться для фильтрации по имени свойства. Эти параметры относятся в разделам реестра (путям элементов), а не к записям реестра (свойствам элементов).
Другим вариантом является использование средства командной reg.exe
строки. Для справки reg.exe
reg.exe /?
введите в командной строке. Чтобы найти запись DevicePath , используйте reg.exe
следующую команду:
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
Вы также можете использовать COM-объект WshShell для поиска некоторых записей реестра, хотя этот метод не работает с большими двоичными данными или именами записей реестра, включая символы обратной косой черты (\
). Добавьте имя свойства с разделителем "\
" в путь элемента:
(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf
Настройка одной записи реестра
Если необходимо изменить определенную запись в разделе реестра, можно использовать один из нескольких подходов. Этот пример изменяет запись Path в разделе HKEY_CURRENT_USER\Environment
. Запись Path указывает расположение для поиска исполняемых файлов.
- Получите текущее значение записи Path с помощью
Get-ItemProperty
. - Добавьте новое значение, отделив его с помощью
;
. - Используйте
Set-ItemProperty
с указанным разделом, именем записи и значением, чтобы изменить запись реестра.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath
Примечание.
Хотя Set-ItemProperty
имеет параметры filter, Include и Exclude , они не могут использоваться для фильтрации по имени свойства. Эти параметры относятся в разделам реестра (путям элементов), а не к записям реестра (свойствам элементов).
Другой вариант — использовать средство командной строки Reg.exe. Для получения справки по reg.exe введите reg.exe /?
в командной строке.
В следующем примере запись Path изменяется за счет удаления пути, добавленного в предыдущем примере.
Get-ItemProperty
по-прежнему используется для получения текущего значения, исключая анализ строки, возвращаемой reg query
. Методы SubString и LastIndexOf используются для получения последнего добавленного пути в запись Path.
$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.
Создание новых записей реестра
Чтобы добавить новую запись реестра с именем PowerShellPath в раздел CurrentVersion, используйтеNew-ItemProperty
с путем к разделу, именем записи и значением записи. В этом примере используется значение переменной Windows PowerShell $PSHome
, в которой хранится путь к каталогу установки Windows PowerShell.
Вы можете добавить новую запись в ключ с помощью следующей команды, а команда также возвращает сведения о новой записи:
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
Значение PropertyType должно быть именем элемента перечисления Microsoft.Win32.RegistryValueKind из следующей таблицы:
Значение PropertyType | Значение |
---|---|
Binary | Двоичные данные |
DWord | Число, которое является допустимым UInt32 |
ExpandString | Строка, которая может содержать динамически раскрывающиеся переменные среды |
MultiString | Многострочная строка |
Строка | Любое строковое значение |
QWord | 8 байтов двоичных данных |
Запись реестра можно добавить в несколько расположений, указав массив значений для параметра Path:
New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
-Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion
Кроме того, можно перезаписать существующее значение записи реестра, добавив параметр Force в любую команду New-ItemProperty
.
Переименование записей реестра
Чтобы переименовать запись 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
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по