2009-04-28 52 views
3

我試圖從Powershell的註冊表項中讀取值。這很簡單,但是,一個特定的註冊表鍵給我帶來麻煩。檢索與Powershell的註冊表值時出錯

如果我運行以下操作,我無法獲得「$ setting」(默認值)的值。

C:\Program Files\PowerGUI> $setting = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf" 

C:\Program Files\PowerGUI> $setting 


PSPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ 
       CurrentVersion\IniFileMapping\Autorun.inf 
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ 
       CurrentVersion\IniFileMapping 
PSChildName : Autorun.inf 
PSDrive  : HKLM 
PSProvider : Microsoft.PowerShell.Core\Registry 
(default) : @SYS:DoesNotExist 

通常,我會做$ setting.Attribute或$ setting。(默認)。但是,這會導致以下錯誤:

C:\Program Files\PowerGUI> $setting.(default) 
The term 'default' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again. 
At :line:1 char:17 
+ $setting.(default <<<<) 

如何獲取「(默認)」屬性的值?

在此先感謝。

回答

8

編輯不得不翻閱一下舊腳本來弄明白這一點。

訣竅是你需要查看底層PSObject來獲取值。在性能袋

$a = get-itemproperty -path "HKLM:\Some\Path" 
$default = $a.psobject.Properties | ?{ $_.Name -eq "(default)" } 

您也可以只使用一個索引,而不是做過濾招

$default = $a.psobject.Properties["(default)"].Value; 
+0

要添加到這一點,在原始代碼中的()指示PowerShell來對待文本(在這種情況下, 「默認」)作爲單獨的命令。當你的屬性具有不尋常的字符時,你需要引用(並且有時使用$())像JaredPar所示的值,以便PowerShell不會將該值解釋爲表達式。其他需要注意的字符是$。 :''(可能還有更多,但這是我所能記得的) – JasonMArcher 2009-04-28 20:38:42

4

另一個版本的特定的外觀:

(GET-ItemProperty「HKLM:\ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ IniFileMapping \ Autorun.inf')。'(默認)'

3

使用Get-Item來獲取表示註冊表項的對象:

PS > $regKey = Get-Item HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf 

這給你一個RegistryKey的實例。 RegistryKey有一個名爲GetValue的方法;如果參數GetValue是空字符串(''),那麼它將返回(default)值:

PS > $regKey.GetValue('') 

這是爲什麼比Get-ItemProperty更好?它更自然地延伸到Get-ChildItemGet-ChildItem會給你一個RegistryKey對象的列表。在我的具體情況,我想列出安裝Python的版本的路徑,在我的機器上安裝:

PS C:\> get-childitem HKLM:\SOFTWARE\Wow6432Node\Python\PythonCore\*\InstallPath ` 
>> | foreach-object { $_.GetValue('') } 
C:\Python26\ArcGIS10.0\ 
C:\Python\27\