Discussion
Although PowerShell does not directly let you access and manipulate the registry of a remote computer, it still supports this by working with the .NET Framework. The functionality exposed by the .NET Framework is a bit more developeroriented than we want, so we can instead use a script to make it easier to work with.
Example 188 lets you set the value of a property on a given remote registry key. In order for this script to succeed, the target computer must have the remote registry service enabled and running.
Example 188. SetRemoteRegistryKeyProperty.ps1
############################################################################## ## ## SetRemoteRegistryKeyProperty.ps1 ## ## Set the value of a remote registry key property ## ## ie: ## ## PS >$registryPath = ## "HKLM:\software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" ## PS >SetRemoteRegistryKeyProperty LEEDESK $registryPath ` ## "ExecutionPolicy" "RemoteSigned" ## ##############################################################################
param( $computer = $(throw "Please specify a computer name."), $path = $(throw "Please specify a registry path"), $property = $(throw "Please specify a property name"), $propertyValue = $(throw "Please specify a property value") )
## Validate and extract out the registry key if($path match "^HKLM:\\(.*)") {
$baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey
("LocalMachine", $computer) } elseif($path match "^HKCU:\\(.*)") {
$baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey ("CurrentUser", $computer) }
Example 188. SetRemoteRegistryKeyProperty.ps1 (continued)
else { WriteError ("Please specify a fullyqualified registry path " + "(i.e.: HKLM:\Software) of the registry key to open.") return }
## Open the key and set its value $key = $baseKey.OpenSubKey($matches[1], $true) $key.SetValue($property, $propertyValue)
## Close the key and base keys $key.Close() $baseKey.Close()