Automate Windows Registry Tasks with PowerShell
PowerShell provides a fast, scriptable alternative to manually
navigating and editing the Windows Registry through
regedit.exe. By treating the registry as a hierarchical
file system drive using the built-in Registry Provider, PowerShell
allows administrators to create, read, modify, and delete registry keys
and values programmatically. This guide outlines how standard registry
management tasks can be completely automated using core PowerShell
cmdlets.
Accessing Registry Drives
PowerShell exposes the registry via PSDrives, mapping standard
registry hives to drive letters: * HKLM: corresponds to
HKEY_LOCAL_MACHINE * HKCU: corresponds to
HKEY_CURRENT_USER
You can navigate these paths just like a standard file system using
Set-Location (cd):
Set-Location -Path "HKLM:\Software\Policies\Microsoft"Creating New Registry Keys and Values
In Regedit, creating a key or value requires right-clicking within a hive. In PowerShell, keys are treated as items, while registry values are treated as properties of those items.
Creating a Key
Use New-Item to create a registry key:
New-Item -Path "HKCU:\Software" -Name "CustomApp" -ForceCreating a Value
Use New-ItemProperty to add a new value (such as
DWORD, String, or Binary) inside
a key:
New-ItemProperty -Path "HKCU:\Software\CustomApp" -Name "EnableFeature" -Value 1 -PropertyType DWORD -ForceReading Registry Data
Instead of manually expanding paths in Regedit to inspect entries,
use Get-ItemProperty to retrieve specific values:
Get-ItemProperty -Path "HKCU:\Software\CustomApp" -Name "EnableFeature"To list all values and subkeys within a specific path, use
Get-ChildItem:
Get-ChildItem -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion"Modifying Existing Registry Values
To change an existing registry setting without opening the GUI
editor, use Set-ItemProperty:
Set-ItemProperty -Path "HKCU:\Software\CustomApp" -Name "EnableFeature" -Value 0This command directly updates the data for the specified property, equivalent to double-clicking a value in Regedit and altering its value data.
Deleting Keys and Values
PowerShell separates the deletion of registry keys from the deletion of individual values inside those keys.
Deleting a Value
Use Remove-ItemProperty to delete a single named
value:
Remove-ItemProperty -Path "HKCU:\Software\CustomApp" -Name "EnableFeature"Deleting a Key
Use Remove-Item to delete an entire key and its
contents:
Remove-Item -Path "HKCU:\Software\CustomApp" -RecurseAutomating Across Multiple Machines
Unlike Regedit, which primarily targets the local computer or
requires connecting to remote registries one by one, PowerShell can
execute registry modifications across multiple endpoints simultaneously
using Invoke-Command:
$Computers = @("Server01", "Server02", "Server03")
Invoke-Command -ComputerName $Computers -ScriptBlock {
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
}This approach allows configuration changes, security hardening, and troubleshooting steps to be integrated into deployment pipelines and automated administrative tasks.