PowerShell: робота з реєстром Windows — читання, запис, видалення
Як читати, змінювати і видаляти ключі реєстру Windows через PowerShell: Get-ItemProperty, Set-ItemProperty, New-Item. Практичні приклади для адміністраторів.
PowerShell дозволяє повністю автоматизувати роботу з реєстром Windows — читати налаштування, змінювати параметри системи, налаштовувати програми і застосовувати конфігурації на сотнях ПК одразу.
Основи: шляхи реєстру в PowerShell
PowerShell має вбудований провайдер для реєстру. Кореневі розділи скорочуються:
| Повний шлях | Скорочення в PowerShell |
|---|---|
| HKEY_LOCAL_MACHINE | HKLM: |
| HKEY_CURRENT_USER | HKCU: |
| HKEY_CLASSES_ROOT | HKCR: |
| HKEY_USERS | HKU: |
| HKEY_CURRENT_CONFIG | HKCC: |
# Переглянути вміст розділу (як ls для папок)
Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
# Перейти в розділ (як cd)
Set-Location HKLM:\SOFTWARE\Microsoft
Get-ChildItem
Читання значень реєстру
# Отримати всі значення розділу
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
# Отримати конкретне значення
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild
# Зберегти у змінну
$regPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$build = (Get-ItemProperty $regPath).CurrentBuild
Write-Output "Windows Build: $build"
# Перевірити чи існує ключ
Test-Path "HKLM:\SOFTWARE\MyApp"
# Отримати конкретне значення безпечно (без помилки якщо немає)
$val = Get-ItemProperty "HKLM:\SOFTWARE\MyApp" -Name "Setting" -ErrorAction SilentlyContinue
if ($val) { Write-Output $val.Setting } else { Write-Output "Не знайдено" }
Запис і зміна значень
# Змінити існуюче значення
Set-ItemProperty "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" `
-Name "HideFileExt" -Value 0 # 0 = показувати розширення файлів
# Вимкнути автозапуск USB носіїв
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" `
-Name "NoDriveTypeAutoRun" -Value 255
# Встановити власний параметр (рядок)
Set-ItemProperty "HKLM:\SOFTWARE\MyApp" -Name "Version" -Value "2.0" -Type String
# Встановити DWORD (число)
Set-ItemProperty "HKLM:\SOFTWARE\MyApp" -Name "Debug" -Value 1 -Type DWord
# Встановити розгорнутий рядок (REG_EXPAND_SZ)
Set-ItemProperty "HKLM:\SOFTWARE\MyApp" -Name "Path" -Value "%ProgramFiles%\MyApp" -Type ExpandString
Створення нових ключів і значень
# Створити новий розділ
New-Item "HKLM:\SOFTWARE\MyCompany\MyApp" -Force
# Створити розділ і одразу додати значення
New-Item "HKLM:\SOFTWARE\MyCompany\MyApp" -Force |
New-ItemProperty -Name "InstallPath" -Value "C:\MyApp" -PropertyType String
# Додати значення до існуючого розділу
New-ItemProperty "HKLM:\SOFTWARE\MyCompany\MyApp" `
-Name "MaxConnections" -Value 10 -PropertyType DWord -Force
Видалення ключів і значень
# Видалити одне значення
Remove-ItemProperty "HKLM:\SOFTWARE\MyApp" -Name "OldSetting"
# Видалити весь розділ (без дочірніх)
Remove-Item "HKLM:\SOFTWARE\MyApp"
# Видалити розділ з усіма дочірніми (рекурсивно)
Remove-Item "HKLM:\SOFTWARE\MyCompany" -Recurse -Force
Практичні приклади
Показати розширення файлів для всіх користувачів
$path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty $path -Name "HideFileExt" -Value 0
Вимкнути телеметрію через реєстр
$telPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
New-Item $telPath -Force | Out-Null
Set-ItemProperty $telPath -Name "AllowTelemetry" -Value 0 -Type DWord
Додати програму в автозапуск
$runPath = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Set-ItemProperty $runPath -Name "MyApp" -Value "C:\MyApp\myapp.exe" -Type String
Видалити програму з автозапуску
Remove-ItemProperty "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -Name "MyApp"
Знайти всі програми в автозапуску
$paths = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
)
$paths | ForEach-Object {
$key = $_
Get-ItemProperty $key -ErrorAction SilentlyContinue |
Get-Member -MemberType NoteProperty |
Where-Object { $_.Name -notmatch "PS" } |
ForEach-Object {
[PSCustomObject]@{
Hive = $key
Name = $_.Name
Value = (Get-ItemProperty $key).$($_.Name)
}
}
} | Format-Table -AutoSize
Резервна копія і відновлення розділу
# Експорт розділу реєстру (як reg export)
$null = Start-Process reg -ArgumentList "export `"HKLM\SOFTWARE\MyApp`" C:\backup-myapp.reg /y" -Wait
# Імпорт (відновлення)
$null = Start-Process reg -ArgumentList "import C:\backup-myapp.reg" -Wait
Підсумок
Get-ItemProperty читає, Set-ItemProperty змінює, New-Item + New-ItemProperty створює, Remove-Item / Remove-ItemProperty видаляє. Ці чотири команди покривають 95% задач з реєстром. Завжди роби резервну копію розділу перед змінами.
⚡ Шукаєш потрібну команду?
→ PowerShell і CMD довідник — 40+ команд з пошуком за задачею. Введи "мережа", "диск" або "безпека" і одразу отримай готову команду.