Get Remote Registry value.
- is there a way to get value of a registry from remote computer..I am trying to values of these keys...
HKEY_LOCAL_MACHINE\SOFTWARE\MQUEST\ScriptEngine\Program\PrimaryScriptServer
HKEY_LOCAL_MACHINE\SOFTWARE\MQUEST\ScriptEngine\Program\SecondaryScriptServer
HKEY_LOCAL_MACHINE\SOFTWARE\MQUEST\ScriptEngine\Program\Server1
HKEY_LOCAL_MACHINE\SOFTWARE\MQUEST\ScriptEngine\Program\Server2
any help is greatly appreciated.
答案
- I understand. In your VBS code is shown that SOFTWARE\MQUEST\ScriptEngine\Program\ is Key path. However PrimaryScriptServer is not a key, but value. And code above retrives only names. If you want to get particular name value, you can use :
$strMachineName = 'MURBAMEXV004'
$objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
$objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program" )
$objRegKey.GetValue("PrimaryScriptServer")
If I understand correctly, this code should work. And after this you can read data for values:
$strMachineName = 'MURBAMEXV004'
$objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
$objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program" )
"PrimaryScriptServer", "SecondaryScriptServer", "Server1", "Server2" | %{
"Data for value " + $_
$objRegKey.GetValue("$_")
}
or place values to variable:
$values = "PrimaryScriptServer", "SecondaryScriptServer", "Server1", "Server2"
and query:
$values | %{
"Data for value " + $_
$objRegKey.GetValue("$_")
}
[тут могла быть ваша реклама] http://www.sysadmins.lv- 已标记为答案Vincent HuMSFT, 版主2009年5月18日 2:16
全部回复
- Hi,
You can use:
$strMachineName = '.'
$objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
$objRegKey= $objReg.OpenSubKey("SYSTEM\\SOFTWARE\MQUEST\\ScriptEngine\\Program\\PrimaryScriptServer" )
$objRegkey.GetValueNames()
Hope it helps.
Grégory Schiro - PowerShell & MOF- 已建议为答案Grégory SchiroMVP2009年5月4日 15:24
- getting error here is the debug output
DEBUG: 1+ ./reg1.ps1
DEBUG: ! CALL script 'reg1.ps1'
DEBUG: 1+ $strMachineName = 'MURBAMEXV004'
DEBUG: ! SET $strMachineName = 'MURBAMEXV004'.
DEBUG: 2+ $objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
DEBUG: ! CALL method 'static Microsoft.Win32.RegistryKey OpenRemoteBaseKey(RegistryHive hKey, String machineName)'
DEBUG: ! SET $objReg = 'HKEY_LOCAL_MACHINE'.
DEBUG: 3+ $objRegKey= $objReg.OpenSubKey("SYSTEM\\SOFTWARE\MQUEST\\ScriptEngine\\Program\\PrimaryScriptServer" )
DEBUG: ! CALL method 'Microsoft.Win32.RegistryKey OpenSubKey(String name)'
DEBUG: ! SET $objRegKey = ''.
DEBUG: 4+ $objRegkey.GetValueNames()
DEBUG: 2+ if ($ErrorView -ne "CategoryView") {
DEBUG: 3+ $myinv = $_.InvocationInfo
DEBUG: ! SET $myinv = 'System.Management.Automation.InvocationInfo'.
DEBUG: 4+ switch -regex ($myinv.MyCommand.CommandType)
DEBUG: 24+ if ($myinv.MyCommand.Name)
DEBUG: 2+ if ($_.InvocationInfo) {
DEBUG: 3+ $posmsg = $_.InvocationInfo.PositionMessage
DEBUG: ! SET $posmsg = '
At C:\reg1.ps1:4 char:25
+ $objRegkey.GetValueNames( ...'.
DEBUG: 7+ if ($ErrorView -eq "CategoryView") {
DEBUG: 11+ $_.Exception.Message + $posmsg
You cannot call a method on a null-valued expression.
At C:\reg1.ps1:4 char:25
+ $objRegkey.GetValueNames( <<<< ) - IT is a Reg_SZ value i am trying to read if that helps
- Rahter than getting the value it would be enough to check if the said keys exist
- Hi,
Please have a read of these articlesPowerShell script to get remote registry key property
http://myitforum.com/cs2/blogs/yli628/archive/2008/12/11/powershell-script-to-get-remote-registry-key-property.aspx - $objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program\\PrimaryScriptServer" )
one slash is missed. And remove SYSTEM in key path.
[тут могла быть ваша реклама] http://www.sysadmins.lv- 已建议为答案Vadims PodansMVP2009年5月5日 8:05
- Still getting same error
- please, show your code.
[тут могла быть ваша реклама] http://www.sysadmins.lv - $strMachineName = 'MURBAMEXV004'
$objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
$objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program\\PrimaryScriptServer" )
$objRegkey.GetValueNames( - this fine works for me. Are you sure that this key exist in HKLM\SOFTWARE\MQUEST\ScriptEngine\Program\PrimaryScriptServer on MURBAMEXV004?
[тут могла быть ваша реклама] http://www.sysadmins.lv
PS C:\> ./reg1.ps1
You cannot call a method on a null-valued expression
At C:\reg1.ps1:4 char:25
+ $objRegkey.GetValueNames <<<< ()
i have check that machine even in 005 the key exist...I can pull if from this VBS..
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\MQUEST\ScriptEngine\Program\"
strValueName = "PrimaryScriptServer"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
verFn = StrValue- I understand. In your VBS code is shown that SOFTWARE\MQUEST\ScriptEngine\Program\ is Key path. However PrimaryScriptServer is not a key, but value. And code above retrives only names. If you want to get particular name value, you can use :
$strMachineName = 'MURBAMEXV004'
$objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
$objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program" )
$objRegKey.GetValue("PrimaryScriptServer")
If I understand correctly, this code should work. And after this you can read data for values:
$strMachineName = 'MURBAMEXV004'
$objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
$objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program" )
"PrimaryScriptServer", "SecondaryScriptServer", "Server1", "Server2" | %{
"Data for value " + $_
$objRegKey.GetValue("$_")
}
or place values to variable:
$values = "PrimaryScriptServer", "SecondaryScriptServer", "Server1", "Server2"
and query:
$values | %{
"Data for value " + $_
$objRegKey.GetValue("$_")
}
[тут могла быть ваша реклама] http://www.sysadmins.lv- 已标记为答案Vincent HuMSFT, 版主2009年5月18日 2:16
- Why make it so hard when it can be done so easy :-)
reg query "\\<computername>\HKLM\SOFTWARE\MQUEST\ScriptEngine\Program\PrimaryScriptServer
Check the "reg query /?" command for details
To get info from several machines this command can be used:
for %i in (server1,server2,server3) do reg query "\\%i\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v SessionPoolSize
This is an example to get/query a given registry key value for all servers in a Terminal Server farm (run from a TS):
for /f "skip=3 delims=* " %i in ('qfarm /servers') do @echo --------------- %i --------------------- & reg query "\\%i\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v SessionPoolSize
Have fun,
Tord Bergset