Summary: Microsoft Scripting Guy, Ed Wilson, talks about using Windows PowerShell to edit the registry on remote computers.
Microsoft Scripting Guy, Ed Wilson, is here. In Wednesday’s PowerShell Essentials live meeting presentation, one of the questions revolved around working with the registry on a remote computer. While there are lots of ways to work with the registry on a remote computer, including using Windows Management Instrumentation, or .NET Framework classes, I like to use a combination of Windows PowerShell remoting and the Windows PowerShell registry provider because it is easier. In fact, by using Windows PowerShell remoting, it is just as easy to work with the remote registry as it is to work with a local registry.
Note
For a good introduction to using Windows PowerShell to work with the registry, see The Scripting Wife, Windows PowerShell, and the Registry.
For more advanced topics, check out some of the other blog posts about the registry in the Hey, Scripting Guy! Blog archives. There you will find blogs such as:
- Can I Change the Default Value of a Registry Key on Multiple Computers?
- How Can I List All User Profiles on a Remote Computer?
- Can I Use the Registry to Retrieve a List of the Most Recently Run Programs?
- How Can I Change Browser History Settings via the Registry?
Suppose I want to create a new registry key under HKEY_CURRENT_USER under the Software key, and I want to call it HSG. The registry location (for the target HSG) is shown in the following image.
To create the new registry key, I use the four steps:
- I use the Push-Location cmdlet (pushd is an alias) to store my current location.
- I use the Set-Location cmdlet to change my working location to the HKCU:\Software location.
- I use the New-Item cmdlet to create the new registry key.
- I use the Pop-Location cmdlet (popd is an alias) to return to my current location.
The commands are shown here.
PS C:\> pushd
PS C:\> Set-Location HKCU:\Software
PS HKCU:\Software> New-Item -Name HSG
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 HSG {}
PS HKCU:\Software> popd
PS C:\>
The newly created registry key is shown in the image that follows.
To add a registry property value, I use the New-ItemProperty cmdlet. I perform the same basic steps I used to create the registry key, but I use the New-ITemProperty cmdlet instead of the New-Item cmdlet, as follows:
- I use the Push-Location cmdlet to store my current location.
- I use the Set-Location cmdlet to change my working location to the HKCU:\Software location.
- I use the New-ItemProperty cmdlet to create the new registry property. I specify the Name, Path, Value, and PropertyType.
- I use the Pop-Location cmdlet to return to my current location.
The use of these techniques is shown here.
PS C:\> pushd
PS C:\> Set-Location HKCU:\Software
PS HKCU:\Software> New-ItemProperty -Name forscripting -PropertyType string -path hsg -Value "PowerShell Rocks"
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\hsg
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName : hsg
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
forscripting : PowerShell Rocks
PS HKCU:\Software> popd
PS C:\>
The newly created registry property is shown in the image that follows.
After I have done all this locally, it is really easy to do it against a remote computer. I can do it by using Windows PowerShell remoting by using the following steps:
- I use the Get-Credential cmdlet to retrieve a credential object to use to make a remote connection.
- I use the Enter-PSSession cmdlet to enter a remote PS Session.
- I use the Push-Location cmdlet to store my current location.
- I use the Set-Location cmdlet to change my working location to the HKCU:\Software location.
- I use the New-Item cmdlet to create the new registry key.
- I use the New-ItemProperty cmdlet to create the new registry property. I specify the Name, Path, Value, and PropertyType.
- I use the Pop-Location cmdlet to return to my previous location.
- I use the EXIT command to leave the remote PS Session.
The following image illustrates this technique.
I then use Remote Desktop to connect to the remote server to verify that the registry key and property are updated. This is shown in the following image.
Well, that is about it for creating a remote registry key. Join me tomorrow, when I will talk about doing this in a single command—a scenario that is useful when you need to make changes on multiple computers.
I invite you to follow me on Twitter and Facebook. If you have any questions, send email to me at scripter@microsoft.com, or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then, peace.
Ed Wilson, Microsoft Scripting Guy