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

Для работы с реестром Windows не обязательно использовать графический редактор regedit.exe , или утилиту командной строки reg.exe. 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:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching

Или

Set-Location -Path HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching

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

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

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

dir

или

Get-ChildItem

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

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

Get-Item .

или

Get-Item -Path HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching

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

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

$DriverUpdate = Get-ItemProperty –Path “HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching”
$DriverUpdate.SearchOrderConfig

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

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

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

Set-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching' -Name SearchOrderConfig -Value 0

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

Get-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching' -Name SearchOrderConfig

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

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

$HKCU_Desktop= "HKCU:Control PanelDesktop"
New-Item –Path $HKCU_Desktop –Name NewKey

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

New-ItemProperty -Path $HKCU_DesktopNewKey -Name "SuperParamString" -Value ”file_name.txt”  -PropertyType "String"

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

  • Binary (REG_BINARY)
  • DWord (REG_DWORD)
  • Qword (REG_QWORD)
  • String (REG_SZ)
  • ExpandString (REG_EXPAND_SZ)
  • MultiString (REG_MULTI_SZ)
  • Unknown

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

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

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

Test-Path 'HKCU:Control PanelDesktopNewKey'

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

regkey='HKCU:Control PanelDesktopNewKey'
$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:SOFTWARE7-zip'
$dest = 'HKLM:SOFTWAREbackup'
Copy-Item -Path $source -Destination $dest -Recurse

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

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

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

$HKCU_Desktop= "HKCU:Control PanelDesktop"
Remove-ItemProperty –Path $HKCU_DesktopNewKey –Name "SuperParamString"

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

Remove-Item –Path $HKCU_DesktopNewKey –Recurse

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

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

Remove-Item –Path $HKCU_DesktopNewKey* –Recurse

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

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

Rename-ItemProperty –path 'HKCU:Control PanelDesktopNewKey' –name "SuperParamString" –newname “OldParamString”

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

Rename-Item -path 'HKCU:Control PanelDesktopNewKey' OldKey

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

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

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

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

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

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

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

$rights = Get-Acl -Path 'HKCU:Control PanelDesktopNewKey'
$rights.Access.IdentityReference

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

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

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

$idRef = [System.Security.Principal.NTAccount]"BuiltInUsers"

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

$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 PanelDesktopNewKey'

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

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

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

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

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

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

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

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

admin

Share
Published by
admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago