PowerShell: Получение, изменение, создание и удаление ключей или параметров реестра

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

Навигация по реестру Windows как по файловой системе с помощью PowerShell

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

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

get-psdrive

get-psdrive

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

cd HKLM:\
Dir -ErrorAction SilentlyContinue

просмотр реестра windows с помощью powershell

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

Чтобы обратиться к ключам реестра, используйте команды с xxx-Item:

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

Параметры реестра следует рассматривать как свойства ключа реестра (аналогично свойствам файлов/папок).[xxx-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

Обратите внимание, что параметры, хранящиеся в ключе реестра, — это не вложенные объекты, а свойство конкретного ключа реестра. Любой ключ реестра может иметь любое количество параметров.

Перечислите содержимое текущего ключа реестра с помощью команды:

dir

Или

Get-ChildItem

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

Используйте Get-Item команда для получения параметров ключа реестра:

Get-Item .
Или
Get-Item –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

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

получение свойств ключа реестра powershell

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

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

Get-ItemProperty

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

Изменение значения реестра с помощью PowerShell

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

Set-ItemProperty

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

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

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

Теперь давайте создадим новый параметр в новом ключе реестра. Предположим, нам нужно создать новый строковый параметр типа REG_SZ с именем SuperParamString и значение filetmp1.txt:

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

Для параметров реестра можно использовать следующие типы данных:

  • Строка (REG_SZ)
  • ExpandString (REG_EXPAND_SZ)
  • MultiString (REG_MULTI_SZ)
  • Двоичный (REG_BINARY)
  • DWord (REG_DWORD)
  • Qword (REG_QWORD)
  • Неизвестно (неподдерживаемый тип данных реестра)

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

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 'The registry entry already exist' }
else
{ New-ItemProperty -Path $regkey -Name $regparam -Value ”woshub_test”  -PropertyType "String"  }

Использование Копировать элемент Команда позволяет копировать записи из одного ключа реестра в другой:

$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 указывает, что все подзаглушки должны быть удалены рекурсивно.

Для удаления всех элементов в reg-ключе (но не самого ключа):

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 '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}

Чтобы найти ключ реестра с определенным именем:

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

Установка разрешений для ключей реестра с помощью PowerShell

Вы можете получить текущие разрешения ключа реестра с помощью команды Get-ACL команда.

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

получение разрешений на ключ реестра с помощью powershell

В следующем примере мы изменим 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

Тип доступа (Разрешить/Запретить):

$acType = [System.Security.AccessControl.AccessControlType]::Allow
Создайте правило доступа:

$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)

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

$rights.AddAccessRule($rule)

Примените новые разрешения к ключу реестра:

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

Убедитесь, что новая группа появилась в ACL ключа реестра.

изменение разрешений ключа реестра с помощью powershell

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *