Управление реестром Windows с помощью PowerShell

PowerShell еще с самой первой версии предоставляет администратору большой набор инструментов для взаимодействия с системным реестром Windows. При желании, все типовые операции по работе с реестром можно выполнять не из интерфейса старого-доброго Regedit, или утилиты reg.exe, а из командой строки PowerShell. А в различных скриптах и сценариях он бывает вообще незаменим. В этой статье мы рассмотрим, как с помощью PowerShell  создавать, редактировать, удалять ключи и параметры реестра Windows, выполнять поиск и подключатся к реестру на удаленном компьютере.

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

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

Работа с реестром системы в PowerShell похожа на работу с обычными файлами на локальном диске.

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

get-psdrive

get-psdrive: ветки реестра в powershell как дискиКак вы видите, встроенный провайдер позволяет получить доступ к содержимому двух веток реестра: HKEY_CURRENT_USER (HKCU) и HKEY_LOCAL_MACHINE (HKLM). Ветви реестра адресуются, аналогично дискам (HKLM:\ и HKCU:\). К примеру, чтобы перейти в корень ветки HKLM выполните:

cd HKLM:\

Перейдти к конкретной ветке реестра (к примеру, отвечающей за настройки  автоматического обновления драйверов) можно с помощью команды  Set-Location (короткий псевдоним sl)

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

Выведем содержимое ветки:

dir

или

Get-ChildItem

Get-ChildItem poshОткроем эту же ветвь в редакторе реестра. Как вы видите, последняя команда вывела только информацию о вложенных ветвях, но не о параметрах текущей ветки.

regeditДело в том, что с точки зрения PowerShell ветвь реестра (ключ) является  аналогом файла, а параметры, хранящиеся в данном ключе реестра – свойствами этого файла.

Поэтому, чтобы получить параметрам, находящимся в данной ветке,  воспользуемся командлетом Get-Item:

Get-Item .

или

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

Get-Item -Path HKLM:\Как вы видите, ключ DriverSearching имеет только один параметр – SearchOrderConfig со значением 0.

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

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

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

Как изменить значение параметра реестра

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

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

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

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

Для созданной ветки добавим новый строковый параметр с именем SuperParamString и значением file_name.txt :

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

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

создать ключ и параметр реестра

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

Удалим созданный ранее параметр 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 '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}

Удаленный доступ к реестру с помощью 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")

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

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

(Пока оценок нет)
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x