--- name: windows-registry description: Read, write, query Windows Registry via PowerShell provider category: windows version: 1.0.0 platform: windows tags: registry, regedit, windows, powershell, hklm, hkcu, settings, config license: Apache-2.0 --- # Windows Registry Read and write Windows Registry keys and values using PowerShell's built-in Registry provider — inspect startup entries, app settings, and system configuration without regedit. ## When to Use - User wants to read a registry value (e.g., installed software, startup entries) - User asks to create or modify a registry key or value - User wants to list all values under a registry path - User needs to check what programs run at Windows startup - User asks to remove a registry value or key ## How to Use ### Read a single registry value ```powershell Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer" ` -Name "ShellState" ``` ### List all values under a key ```powershell Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ``` ### Check startup programs (current user and all users) ```powershell # Current user only Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" # All users (machine-wide) Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" ``` ### Create a new registry key ```powershell New-Item -Path "HKCU:\Software\Aiden" -Force ``` ### Set a registry value (string) ```powershell Set-ItemProperty -Path "HKCU:\Software\Aiden" -Name "Version" -Value "3.5.0" -Type String ``` ### Set a registry value (DWORD) ```powershell Set-ItemProperty -Path "HKCU:\Software\Aiden" -Name "Enabled" -Value 1 -Type DWord ``` ### Delete a registry value ```powershell Remove-ItemProperty -Path "HKCU:\Software\Aiden" -Name "OldSetting" ``` ### Delete a registry key and all subkeys ```powershell Remove-Item -Path "HKCU:\Software\Aiden" -Recurse -Force ``` ### Search registry for a value name ```powershell Get-ChildItem -Path "HKLM:\SOFTWARE" -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.Property -contains "DisplayName" } | Get-ItemProperty | Select-Object DisplayName, DisplayVersion, Publisher | Sort-Object DisplayName ``` ### List installed software ```powershell Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where-Object DisplayName | Sort-Object DisplayName ``` ## Examples **"What programs launch at startup for my user?"** → `Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"` — each value name is an entry, value data is the command. **"List all installed software with version numbers"** → Query both HKLM and HKCU Uninstall keys and merge results. **"Add a registry entry to run a script at login"** → `Set-ItemProperty -Path "HKCU:\...\Run" -Name "MyScript" -Value "powershell.exe -File C:\scripts\login.ps1"` ## Cautions - Modifying HKLM keys requires an elevated session (UAC dialog) — HKCU keys do not - Always read a key before modifying it to understand the current state - Deleting registry keys is permanent — there is no Recycle Bin for registry changes - Back up a key before editing: `reg export "HKCU\Software\Aiden" C:\backup\aiden-backup.reg` - Registry paths in PowerShell use `\` as separator (not `/`) and hive aliases like `HKCU:` and `HKLM:`