IT 专业人士的资源 > 论坛主页 > Windows PowerShell > Get Remote Registry value.
提出问题提出问题
 

已答复Get Remote Registry value.

  • 2009年5月4日 14:09Laserdue 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    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.

答案

  • 2009年5月11日 18:15Vadims PodansMVP用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     已答复
    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

全部回复

  • 2009年5月4日 15:24Grégory SchiroMVP用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     建议的答复
    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
  • 2009年5月4日 15:36Laserdue 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    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( <<<< )
  • 2009年5月4日 16:21Laserdue 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    IT is a Reg_SZ value i am trying to read if that helps
  • 2009年5月4日 16:27Laserdue 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    Rahter than getting the value it would be enough to check if the said keys exist
  • 2009年5月5日 6:41Pravin Mestry 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    Hi,
    Please have a read of these articles
  • 2009年5月5日 7:53Vadims PodansMVP用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     建议的答复
    $objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program\\PrimaryScriptServer" )
    one slash is missed.  And remove SYSTEM in key path.
    [тут могла быть ваша реклама] http://www.sysadmins.lv
  • 2009年5月5日 8:42Laserdue 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    Still getting same error
  • 2009年5月5日 14:00Vadims PodansMVP用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    please, show your code.
    [тут могла быть ваша реклама] http://www.sysadmins.lv
  • 2009年5月8日 11:18Laserdue 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    $strMachineName = 'MURBAMEXV004'
    $objReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachineName)
    $objRegKey= $objReg.OpenSubKey("SOFTWARE\\MQUEST\\ScriptEngine\\Program\\PrimaryScriptServer" )
    $objRegkey.GetValueNames(
  • 2009年5月8日 17:37Vadims PodansMVP用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    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
  • 2009年5月11日 14:57Laserdue 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     

    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
  • 2009年5月11日 18:15Vadims PodansMVP用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     已答复
    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
  • 2009年6月19日 16:18Tord Bergset 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    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