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
Для видалення всіх елементів в гілці, але не самого розділу, команда буде такою:
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")
Отже, ми розглянули типові приклади використання PowerShell для роботи з системним реєстром Windows. Як ви бачите, нічого складного.