Работа с реестром powershell: Работа с ключами и записями реестра Windows из PowerShell

Содержание

Работа с ключами и записями реестра Windows из PowerShell

Для работы с реестром Windows не обязательно использовать графический редактор
regedit.exe
, или утилиту командной строки
reg.exe.
PowerShell предоставляет администратору большое количество инструментов для взаимодействия с реестром. С помощью PowerShell вы можете создать, изменить или удалить ключ/параметр реестра, выполнить поиск значения и подключиться к реестру на удаленном компьютере.

Содержание:

  • Навигация в реестре с помощью PowerShell
  • Получить значение параметра реестра с помощью PowerShell
  • Изменить значение параметра реестра из PowerShell
  • Как создать новый раздел (ключ) или параметр реестра из командной строки PowerShell?
  • Удаление раздела или параметра реестра
  • Как переименовать ветку или параметр реестра?
  • Поиск в реестре с помощью PowerShell
  • Управление правами на ветки реестра из PowerShell
  • Удаленный доступ к реестру с помощью PowerShell

Навигация в реестре с помощью PowerShell

Работа с реестром Windows в PowerShell похожа на работу с обычными файлами на локальном диске. Основное отличие в том, что в этой концепции ветки реестра являются аналогом файлов, а ключи (параметры) реестра – свойствами этих файлов.

Выведите список доступных дисков на компьютере:

get-psdrive

Обратите внимание, что среди обычных дисков (с назначенными буквами дисков) есть особые устройства, доступные через провайдера Registry – HKCU (HKEY_CURRENT_USER) и HKLM (HKEY_LOCAL_MACHINE). Вы можете перемещаться по дереву реестра так же как вы перемещаетесь по дискам. Для обращения к определенному кусту реестра используется адресация HKLM:\ и HKCU:\.

cd HKLM:\
Dir -ErrorAction SilentlyContinue

Т.е. вы можете обращаться к веткам реестра и им значениям (параметрам) с помощью тех же командлетов PowerShell, которые вы используете для управления файлами.

Для обращения к веткам (разделам реестра) используются командлеты с -Item:

  • Get-Item
    – получить информацию о ветке реестра
  • New-Item
    — создать новый раздел реестра
  • Remove-Item
    – удалить ветку реестра

Ключи (параметры) реестра нужно рассматривать, как свойства ветки реестра (аналогично свойствам файла). Для работы с параметрами реестра используются командлеты, заканчивающиеся на -ItemProperty:

  • Get-ItemProperty
    – получить значение параметра реестра
  • Set-ItemProperty
    – изменить название или значение параметра реестра
  • New-ItemProperty
    – создать параметр реестра
  • Rename-ItemProperty
    – переименовать параметр реестра
  • Remove-ItemProperty
    — удалить параметр

Чтобы перейти к определенной ветке реестра (например, к ветке в которой хранятся настройки автоматического обновления драйверов) можно использовать одну из двух команд:

cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

Или

Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

Получить значение параметра реестра с помощью PowerShell

Обратите внимание, что параметры, хранящиеся в ветке реестра, считаются не вложенными объектами (не аналогом файлов на файловой системе), а параметрами (Property) конкретной ветки реестра. Т.е. у любой ветке реестра может быть любое количество параметров.

Выведите содержимое текущей ветки командой:

dir

или

Get-ChildItem

Как вы видите, команда вывела информацию о вложенных ветках реестра и их свойствах. Но не вывела информацию о параметр SearchOrderConfig, который является свойством текущей ветки.

Чтобы получить список параметров (свойств) ветки реестра, выполните:

Get-Item .

или

Get-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

Как вы видите, ключ реестра DriverSearching имеет только один параметр – SearchOrderConfig со значением 1.

Чтобы получить значение параметра ключа реестре, используется командлет Get-ItemProperty.

$DriverUpdate = Get-ItemProperty –Path “HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching”
$DriverUpdate.SearchOrderConfig

Мы получили, что значение параметра SearchOrderConfig равно 1.

Изменить значение параметра реестра из PowerShell

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

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0

Проверьте, что значение параметра изменилось:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig

Как создать новый раздел (ключ) или параметр реестра из командной строки PowerShell?

Чтобы создать новую ветку реестра используется команда New-Item. Создадим новую ветку с именем NewKey:

$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
New-Item –Path $HKCU_Desktop –Name NewKey

Теперь создадим новый параметр (свойство) в новой ветке. Допустим, нам нужно создать новый строковый параметр типа REG_SZ с именем SuperParamString и значением file_name.txt :

New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value ”file_name. txt”  -PropertyType "String"

Убедитесь, что в реестре появился новый ключ и параметр.

Как из PowerShell проверить, что раздел реестра существует?

Если вам нужно проверить, существует ли раздел определенный реестра, используйте командлет Test-Path:

Test-Path 'HKCU:\Control Panel\Desktop\NewKey'

Следующий PowerShell скрипт позволит проверить, существует ли определенный параметр реестра, и если нет, создать его.

regkey='HKCU:\Control Panel\Desktop\NewKey'
$regparam='testparameter'

if (Get-ItemProperty -Path $regkey -Name $regparam -ErrorAction Ignore)
{ write-host 'Параметр реестра существует' }
else
{ New-ItemProperty -Path $regkey -Name $regparam -Value ”new_value”  -PropertyType "String"  }

С помощью командлета Copy-Item можно скопировать записи из одной ветки реестра в другую

$source='HKLM:\SOFTWARE\7-zip\'
$dest = 'HKLM:\SOFTWARE\backup'
Copy-Item -Path $source -Destination $dest -Recurse

Если нужно скопировать все, включая вложенные ветки, добавьте параметр –Recurse.

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

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

$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
Remove-ItemProperty –Path $HKCU_Desktop\NewKey –Name "SuperParamString"

Можно удалить ветку реестра целиком со всем содержимым:

Remove-Item –Path $HKCU_Desktop\NewKey –Recurse

Примечание. Ключ –Recurse говорит о том, что нужно рекурсивно без подтверждения удалить все вложенные подразделы.

Для удаления всех вложенных веток реестра (но не самого раздела):

Remove-Item –Path $HKCU_Desktop\NewKey\* –Recurse

Как переименовать ветку или параметр реестра?

Вы можете переименовать параметр реестра с помощью команды:

Rename-ItemProperty –path 'HKCU:\Control Panel\Desktop\NewKey' –name "SuperParamString" –newname “OldParamString”

Аналогично можно переименовать ветку реестра:

Rename-Item -path 'HKCU:\Control Panel\Desktop\NewKey' OldKey

Поиск в реестре с помощью PowerShell

PowerShell позволяет выполнять поиск по реестру. Следующий скрипт выполняет поиск по ветке HKCU:\Control Panel\Desktop параметров, в имени которых содержится ключ dpi.

$Path = (Get-ItemProperty ‘HKCU:\Control Panel\Desktop’)
$Path.PSObject.Properties | ForEach-Object {
If($_.Name -like '*win*'){
Write-Host $_.Name ' = ' $_.Value
}
}

Для поиска ветки реестра с определенным именем:

Get-ChildItem -path hkcu:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*winitpro*"}

Управление правами на ветки реестра из PowerShell

С помощью командлета Get-Acl вы можете получить текущие права на ветку реестра (командлет Get-ACL позволяет также управлять NTFS разрешениями на файлы и папки).

$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
$rights.Access.IdentityReference

В следующем примере мы изменим ACL на данную ветку реестра, предоставив право записи для группы Users.

Получите текущие разрешения:
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Укажите, кому нужно дать доступ:

$idRef = [System. Security.Principal.NTAccount]"BuiltIn\Users"

Выберите уровень доступа:

$regRights = [System.Security.AccessControl.RegistryRights]::WriteKey

Задайте настройки наследования:

$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::None

Тип доступа (Allow/Deny):

$acType = [System.Security.AccessControl.AccessControlType]::Allow

Создайте правило:
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)

Добавим новое правило к текущему списку:

$rights.AddAccessRule($rule)

Применить новые права к ветке реестра:

$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Проверьте, что новые в списке доступа к ветке реестра появилась новая группа пользователей.

Удаленный доступ к реестру с помощью PowerShell

PowerShell позволяет получить доступ к реестру удаленного компьютера. К удаленном компьютеру можно подключится через WinRM (Invoke-Command или Enter-PSSession). Чтобы получить значение параметра реестра на удаленном компьютере, выполните:

Invoke-Command –ComputerName srv-fs1 –ScriptBlock { Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}

Или вы можете использовать подключение к удаленному реестру (служба RemoteRegistry должна быть включена):

$Server = "srv-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")

Совет. Если нужно создать/изменить определённый параметр реестра на нескоьких компьютерах домена AD, проще воспользоваться возможностями GPO.

Итак, мы рассмотрели типовые примеры использования PowerShell для работы с системным реестром Windows. Как вы видите, ничего сложного. Возможности редактирования реестра Windows из PowerShell очень удобно использовать различных скриптах автоматизации.

Работа с записями реестра — PowerShell


  • Статья



Этот пример применяется только к платформам Windows.

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

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

Существует несколько способов просмотра реестра. Самый простой — получить имена свойств, связанные с разделом. Например, чтобы просмотреть имена записей в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, используйте Get-Item. Разделы реестра имеют свойство с универсальным именем «Property», которое является списком записей реестра в разделе. Следующая команда выбирает свойство 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 указывает расположение для поиска исполняемых файлов.

  1. Получите текущее значение записи Path с помощью Get-ItemProperty.
  2. Добавьте новое значение, отделив его с помощью ;.
  3. Используйте 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Значение
Двоичные данныеДвоичные данные
DWordЧисло, которое является допустимым UInt32
ExpandStringСтрока, которая может содержать динамически раскрывающиеся переменные среды
MultiStringМногострочная строка
СтрокаЛюбое строковое значение
QWord8 байтов двоичных данных

Запись реестра можно добавить в несколько расположений, указав массив значений для параметра 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

  • Статья

Этот пример применим только к платформам Windows.

Поскольку ключи реестра являются элементами на дисках PowerShell, работа с ними очень похожа на работу
с файлами и папками. Одним из важных отличий является то, что каждый элемент в PowerShell на основе реестра
диск — это контейнер, как и папка на диске файловой системы. Однако записи реестра и их
связанные значения являются свойствами элементов, а не отдельными элементами.

Список всех подразделов раздела реестра

Вы можете отобразить все элементы непосредственно в разделе реестра, используя Get-ChildItem . Добавьте необязательный
Принудительно параметр для отображения скрытых или системных элементов. Например, эта команда отображает элементы
непосредственно на диске PowerShell HKCU: , что соответствует реестру HKEY_CURRENT_USER
куст:

 Get-ChildItem -Path HKCU:\ | Имя объекта выбора
 
 Куст: Microsoft. PowerShell.Core\Registry::HKEY_CURRENT_USER
Имя
----
HKEY_CURRENT_USER\AppEvents
HKEY_CURRENT_USER\Консоль
HKEY_CURRENT_USER\Панель управления
HKEY_CURRENT_USER\Директшоу
HKEY_CURRENT_USER\фиктивный
HKEY_CURRENT_USER\Окружающая среда
HKEY_CURRENT_USER\EUDC
HKEY_CURRENT_USER\Раскладка клавиатуры
HKEY_CURRENT_USER\MediaFoundation
HKEY_CURRENT_USER\Майкрософт
HKEY_CURRENT_USER\Сеть
HKEY_CURRENT_USER\Принтеры
HKEY_CURRENT_USER\Программное обеспечение
HKEY_CURRENT_USER\Система
HKEY_CURRENT_USER\Удалить
HKEY_CURRENT_USER\WXP
HKEY_CURRENT_USER\Нестабильная среда
 

Это ключи верхнего уровня, видимые под HKEY_CURRENT_USER в редакторе реестра.
( regedit.exe ).

Вы также можете указать этот путь к реестру, указав имя поставщика реестра, а затем
:: . Полное имя поставщика реестра — Microsoft.PowerShell.Core\Registry , но это может быть
сокращено до Registry . Любая из следующих команд будет отображать содержимое непосредственно под
HKCU: .

 Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:
 

Эти команды перечисляют только непосредственно содержащиеся элементы, как при использовании DIR в cmd.exe или ls
в оболочке UNIX. Для отображения содержащихся элементов необходимо указать параметр Recurse . Чтобы перечислить все
ключи реестра в HKCU: используйте следующую команду.

 Get-ChildItem -Path HKCU:\ -Recurse
 

Get-ChildItem может выполнять сложную фильтрацию с помощью своих Path , Filter ,
Включить параметры и Исключить параметры , но эти параметры обычно основаны только на имени. Ты
может выполнять сложную фильтрацию на основе других свойств элементов с помощью командлета Where-Object .
Следующая команда находит все ключи в пределах HKCU:\Software , которые имеют не более одного подраздела и
также имеют ровно четыре значения:

 Get-ChildItem -Path HKCU:\Software -Recurse |
    Где-объект {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }
 

Копирование ключей

Копирование выполняется с помощью Copy-Item . В следующем примере копируется подраздел CurrentVersion из
HKLM:\SOFTWARE\Microsoft\Windows\ и все его свойства на HKCU:\ .

 Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:
 

Если вы изучите этот новый ключ в редакторе реестра или с помощью Get-ChildItem , вы заметите, что вы
не иметь копий содержащихся подразделов в новом местоположении. Чтобы скопировать все содержимое
контейнера необходимо указать параметр Recurse . Чтобы сделать предыдущую команду копирования
рекурсивный, вы должны использовать эту команду:

 Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse
 

Вы по-прежнему можете использовать другие инструменты, которые у вас уже есть, для создания копий файловой системы. Любой реестр
инструменты редактирования, в том числе reg.exe , regini.exe , regedit.exe и COM-объекты, которые поддерживают
редактирование реестра, например WScript.Shell и класс WMI StdRegProv , можно использовать изнутри
PowerShell.

Создание ключей

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

 New-Item -Path HKCU:\Software_DeleteMe
 

Вы также можете использовать путь на основе провайдера для указания ключа:

 New-Item -Path Registry::HKCU\Software_DeleteMe
 

Удаление ключей

Удаление элементов практически одинаково для всех провайдеров. Следующие команды молча удаляют
элементы:

 Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key с пробелами в имени'
 

Удаление всех ключей под определенным ключом

Вы можете удалить содержащиеся элементы с помощью Remove-Item , но вам будет предложено подтвердить удаление
если элемент содержит что-либо еще. Например, если мы попытаемся удалить HKCU:\CurrentVersion
созданный нами подраздел, мы видим это:

 Remove-Item -Path HKCU:\CurrentVersion
 
 Подтвердить
Элемент в HKCU:\CurrentVersion\AdminDebug имеет дочерние элементы и -recurse
параметр не указан. Если вы продолжите, все дочерние элементы будут удалены с
предмет. Вы уверены что хотите продолжить?
[Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"):
 

Чтобы удалить содержащиеся элементы без запроса, укажите параметр Recurse :

 Remove-Item -Path HKCU:\CurrentVersion -Recurse
 

Если вы хотите удалить все элементы в пределах HKCU:\CurrentVersion , но не HKCU:\CurrentVersion
вместо этого вы можете использовать:

 Remove-Item -Path HKCU:\CurrentVersion\* -Recurse
 

Работа с записями реестра — PowerShell

  • Статья

Этот пример применим только к платформам 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 Свойство
 
 Путь устройства
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
Идантификационный номер продукта
 

Чтобы просмотреть записи реестра в более удобочитаемой форме, используйте 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
Путь устройства: C:\WINDOWS\inf
MediaPathUnexpanded: C:\WINDOWS\Media
Путь к ProgramFiles: C:\Program Files
ProgramW6432Dir : C:\Program Files
SM_ConfigureProgramsName: установить доступ к программе и значения по умолчанию
SM_GamesName : Игры
PSPath: Microsoft. PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows\CurrentVersion
PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Майкрософт\Виндовс
PSChildName : Текущая Версия
PSДиск: 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 .
 
 ...
Путь устройства: 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
 
 Путь устройства: 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 : Текущая Версия
PSДиск: HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
 

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

Примечание

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

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

 reg запрос HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
 
 ! РЕГ.EXE ВЕРСИЯ 3.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    Путь устройства 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 9.0022 .
Запись Path указывает, где найти исполняемые файлы.

  1. Получить текущее значение записи Path с помощью Get-ItemProperty .
  2. Добавьте новое значение, разделив его ; .
  3. Используйте Set-ItemProperty с указанным ключом, именем записи и значением для изменения реестра
    вход.
 $value = Get-ItemProperty -Path HKCU:\Environment -Name Путь
$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 /? в
командная строка.

В следующем примере изменяется Путь , удалив путь, добавленный в приведенном выше примере.
Get-ItemProperty по-прежнему используется для получения текущего значения, чтобы избежать разбора строки.
возвращено из reg-запроса . Методы SubString и LastIndexOf используются для извлечения
последний путь добавлен в запись Путь .

 $value = Get-ItemProperty -Path HKCU:\Environment -Name Путь
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg добавить HKCU\Environment /v путь /d $новый путь /f
 
 Операция успешно завершена.
 

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

Чтобы добавить новую запись с именем «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 : Текущая Версия
PSДиск: HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Путь к PowerShell: C:\Program Files\Windows PowerShell\v1.0
 

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

PropertyType Значение Значение
Двоичный Двоичные данные
DWord Допустимый номер UInt32
ExpandString Строка, которая может содержать динамически расширяемые переменные среды
Многострочный Многострочная строка
Строка Любое строковое значение
QWord 8 байт двоичных данных

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

 New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
  -Путь HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion
 

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