Skip to content

Working with the Registry from PowerShell

Sources:

  • https://docs.microsoft.com/en-us/powershell/scripting/samples/working-with-registry-entries?view=powershell-7.2
  • https://docs.microsoft.com/en-us/powershell/scripting/samples/working-with-registry-keys?view=powershell-7.2
  • https://docs.microsoft.com/en-us/powershell/scripting/samples/working-with-files-folders-and-registry-keys?view=powershell-7.2

Contents

Creating New Registry Entries

To add a new entry to the Registry, use New-ItemProperty with the path to the key, the entry name, and the value of the entry.

For this example, to add a new entry for $PSHOME (The Windows PowerShell variable $PSHome stores the path to the installation directory for Windows PowerShell), use the following command. Not that the command also returns information about the new entry:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

Returns:

PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

The PropertyType must be the name of a Microsoft.Win32.RegistryValueKind enumeration member from the following table:

PropertyType Value Meaning
Binary Binary data
DWord A number that is a valid UInt32
ExpandString A string that can contain environment variables that are dynamically expanded
MultiString A multiline string
String Any string value
QWord 8 bytes of binary data
You can add a registry entry to multiple locations by specifying an array of values for the **Path** parameter.
New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
  -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion

You can also overwrite a pre-existing registry entry value by adding the Force parameter to any New-ItemProperty command.

Renaming Registry Entries

To rename a specific Registry entry use the Rename-ItemProperty cmdlet:

# rename the **PowerShellPath** entry to "PSHome"
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

# To display the renamed value, add the **PassThru** parameter to the command
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

Deleting Registry Entries

To delete a key/entry from a specific path in the Registry use the Remove-ItemProperty cmdlet:

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath

Backlinks:

list from [[Working with the Registry from PowerShell]] AND -"Changelog"