Управління реєстром Windows за допомогою PowerShell

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

зміст:

  • Навігація в реєстрі за допомогою PowerShell
  • Як змінити значення параметра реєстру
  • Як створити новий розділ (ключ) або параметр реєстру
  • Видалення розділу або параметра реєстру
  • Як перейменувати ключ або параметр
  • Пошук в реєстрі за допомогою PowerShell
  • Віддалений доступ до реєстру за допомогою PowerShell

Навігація в реєстрі за допомогою PowerShell

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

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

get-psdrive

Як ви бачите, вбудований провайдер дозволяє отримати доступ до вмісту двох гілок реєстру: 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

Відкриємо цю ж гілка в редакторі реєстру. Як ви бачите, остання команда вивела тільки інформацію про вкладені гілках, але не про активних гілки.

Справа в тому, що з точки зору PowerShell гілка реєстру (ключ) є аналогом файлу, а параметри, що зберігаються в цьому ключі реєстру - властивостями цього файлу.

Тому, щоб отримати параметрам, які перебувають в даній гілці, скористаємося Командлети Get-Item:

Get-Item .

або

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

Як ви бачите, ключ DriverSearching має тільки один параметр - SearchOrderConfig зі значенням 0.

Щоб звернеться до конкретного параметру ключа, використовується командлет Get-ItemProperty. Наприклад, дамо вміст гілки якоїсь змінної і отримаємо значення конкретного параметра:

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

Ми отримали, що значення параметра 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

Як створити новий розділ (ключ) або параметр реєстру

Для додавання нової гілки реєстру, скористаємося командою 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. Як ви бачите, нічого складного.