- The nice thing about this command is you can also specify alternate credentials. However, it does require that WsMan is correctly configured for powershell remoting to work. Which, 9 times out of 10 in most environments it is not. Option 2 – The Microsoft.Win32.RegistryKey Class.
- Powershell get registry value remote machine, Mar 31, 2016 Powershell and WMI are also safe regarding protecting your credentials over the network (just watch out using CredSSP with powershell!). All the methods and scripts require administrative privileges on the remote hosts so you would want to run these commands from a SAFE (non.
As an IT pro I frequently need to read and write to registry keys on remote computers, either ad-hoc or via script. Sure I could use Regedit, or RDP to the server in question, but that involves a lot of clicking, and to be honest, moving my right hand to my mouse seems like such hard work 🙂
I though I’d show you a number of ways of doing this, as well as their limitations, as well as my personal favourite.
Assigning Permissions to a Registry Key. Click the key that you want to assign permissions. On the Edit menu, click Permissions. Click the group or user name that you want to work with.
Option 1 – Get-ItemProperty
The Powershell cmdlet Get-ItemProperty
can be used in conjunction with Invoke-Command
to execute a command on a remote computer.
2 | Invoke-Command-scriptblock{Get-ItemProperty-Path'HKLM:SoftwareMicrosoftWindows NTCurrentVersion |
The nice thing about this command is you can also specify alternate credentials. However, it does require that WsManis correctly configured for powershell remoting to work. Which, 9 times out of 10 in most environments it is not.
Option 2 – The Microsoft.Win32.RegistryKey Class
The Microsoft.Win32.RegistryKey c
lass is another way of accessing registry settings remotely. An example using this method is as follows:
2 | $reg=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine','Server01') $subkey=$reg.OpenSubKey('SOFTWAREMicrosoftWindows NTCurrentVersion') |
This is more likely to work as it is not reliant on WsMan being configured. However, it does require the RemoteRegistryservice to be running on the target computer. Which, by default is not. Also, there is no way to specify alternatecredentials, which can present a few problems depending on the computer you are talking to. e.g. non domain-joined machines mounted on the back of a 42″ LED TV mounted 5 meters off the floor… Quite a specific example there.
Option 3 (preferred) – WMI
My final and preferred option is using WMI. They beautiful thing about this method is WMI is typically available (I’m my experience) in most environments, also it accepts alternative credentials and is not reliant on the RemoteRegistry service.
2 4 6 | $reg=Get-WmiObject-List-Namespacerootdefault-ComputerName RemotePC-Credential'Alt Credentials'|Where-Object{$_.Name-eq'StdRegProv'} #Get a Value $reg.GetStringValue($HKLM,'SOFTWAREMicrosoftWindows NTCurrentVersion','ProductName').sValue |
You will be prompted for alternate credentials when running this script, if you wish these can be hardcoded, although I strongly discourage saving passwords as plain text.
Powershell Opensubkey
2 | $pass=ConvertTo-SecureString'Password'-AsPlainText-Force $cred=New-Object-TypeName System.Management.Automation.PSCredential-ArgumentList$user,$pass |
C# Registrykey Class
You can view all the required methods of the StdRegProv WMI class on MSDN here: https://msdn.microsoft.com/en-us/library/aa393664(v=vs.85).aspx
The only downside to this option was it took me a while to stumble across it!
I hope this is of use , thanks for taking the time to read my blog!
C# Registrykey
Working on Remote Registry is always challenging. If you are administrator, I am sure you would have come across various times that you wanted to update registry of the computer and you have to login to the each server and apply the registry. Powershell has made most of our administrator’s life easier. Let’s understand how we can access and edit registry of remote computer using powershell
Let’s understand code with example. Below Script take the list of server name in CSV file and reads each server name one by one and opens the registry Key and prints the value. In this fashion you can get any key and get the value. In the below script I am trying to get the value of HKEY_CurrentUsers. This is the reason current in OpenRemoteBaseKey. If you Access keys of HKEY_Localmachine and use LocalMachine
If you wanted to get the list of subfolder under the folder in the registry then use the below code. This will get list of all the subfolder MSExchangeISClustername. Getsubkeynames() does this.
Registrykey
If you wanted to write or edit the remote registry then below code will help. This code will create the new key if the key does not exist else it will edit the existing key to the required value. Below code will create the Dword key if key does not exit there else it will edit the existing key to the required value on the entire computer mentioned in the CSV file.