2011-08-11 46 views
1

註冊表獲取數據我有我想通過PowerShell來檢查以下注冊表鍵值:如何從一個值從使用PowerShell

「SERVER_NAME」

HK_CLASSES_ROOT \的AppID \ {54C92AE1-77C3 -11D1-9B6C-00A024BF0B6D}

值爲「RemoteServerName」,該值中的數據是我需要檢查的服務器。

註冊表視圖:

值數據


(默認)WFM理貨服務器 RemoteServerName DNVR-WFMTAL10

到目前爲止,我嘗試了以下代碼,但我得到的是VALUENAME( RemoteServerName)或來自默認值(WFM Tally Server)的數據

這裏是:

foreach ($server in $server_list){ 
$hklm = 2147483648 
$sSubKeyName = "AppID\\{54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}" 
$sValueName = "WFM Tally Server" 
$wmi = [wmiclass]"Root\default:stdRegProv" 
($wmi.GetStringValue($hklm,$sSubKeyName)).sValue 

,這裏是另一個代碼:

foreach ($server in $server_list){ 
$hklm = 2147483648 
$sSubKeyName = "AppID\\{54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}" 
$sValueName = "WFM Tally Server" 
$wmi = [wmiclass]"Root\default:stdRegProv" 
($wmi.GetStringValue($hklm,$sSubKeyName)).sValue 

我缺少什麼?

回答

2

Powershell具有非常好的註冊表導航功能。您不必使用WMI:

New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT 
cd "HKCR:\AppID\{54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}" 
(get-itemproperty -path . -name RemoteServerName).RemoteServerName 

http://msdn.microsoft.com/en-us/library/bb648598%28v=vs.85%29.aspx

+0

如果不創建'New-PSDrive'(HKCR :),您可以直接'cd'Registry :: HKEY_CLASSES_ROOT \ AppID \ {54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}「'。 –

0

我們有一個小命令,將做到這一點(帶有一個免費試用,如果你只是經過一些短期是) - http://www.vexasoft.com/cmdletlibrary/support/getregistrykey.html。然後,你可以做到這一點的一條線(它支持遠程計算機,32位到64位的訪問,憑證等):如果你不能使用,雖然第三方的cmdlet

foreach ($server in $server_list) 
{ 
    Get-RegistryKey -Key "HKCR:\AppID\{54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}" -ValueName RemoteServerName -Computer $server 
} 

,有OpenRemoteBaseKey在框架:

foreach ($server in $server_list) 
    { 
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('ClassesRoot', $Server) 
$regkey = $reg.OpenSubkey("AppID\\{54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}") 
$regkey.GetValue("RemoteServerName") 
    } 
3

如果你試圖從遠程計算機「服務器」上的註冊表鍵的值,那麼你的主要問題是這段代碼:

$ WMI = [wmiclass]「Root \ default:stdRegProv」

瀏覽遠程機器上的按鍵,你需要連接到註冊表的遠程主機的UNC路徑上。

[WmiClass]"\\$Server\ROOT\DEFAULT:StdRegProv" 

有關WMI的StdRegProv更多信息請參見http://msdn.microsoft.com/en-us/library/aa393664(v=vs.85).aspx

快速參考,該類根據不同的註冊表配置單元:

HKEY_CLASSES_ROOT (2147483648 (0x80000000)) 
HKEY_CURRENT_USER (2147483649 (0x80000001)) 
HKEY_LOCAL_MACHINE (2147483650 (0x80000002)) 
HKEY_USERS (2147483651 (0x80000003)) 
HKEY_CURRENT_CONFIG (2147483653 (0x80000005)) 

所以你的代碼的正確版本是:

foreach ($server in $server_list){ 
    $HKCR = [uint32]"0x80000000" 
    $sSubKeyName = "AppID\{54C92AE1-77C3-11D1-9B6C-00A024BF0B6D}" 
    $sValueName = "RemoteServerName" 
    $wmi = [wmiclass]"\\$server\ROOT\DEFAULT:StdRegProv" 
    $wmi.GetStringValue($HKCR, $sSubKeyName, $sValueName) 
} 

僅供參考,一個regi(默認值)的名稱stry鍵實際上是一個空字符串。當顯示鍵值時,Regedit簡單地用(Default)替換這個空字符串。所以,如果你需要讀取一個鍵的默認值,你可以使用:

$wmi.GetStringValue($HKCR, $sSubKeyName, "") 

希望任何人誰碰到這個來發現它是有用的。 o7

相關問題