2013-05-01 78 views
13

在從PowerShell中的註冊表項得到一個值的方法是:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion CommonFilesDir 

然而,命令返回一些額外的屬性我通常不想:

CommonFilesDir : C:\Program Files\Common Files 
PSPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
PSChildName : CurrentVersion 
PSDrive  : HKLM 
PSProvider  : Microsoft.PowerShell.Core\Registry 

我只想實際值,在這種情況下是一個字符串。要做到這一點我必須使用更復雜的:

$commonFilesDir = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion CommonFilesDir).CommonFilesDir 

除了寫我自己的別名,是不是有寫屬性名兩次,得到一個的一種方式?

我可以運行下面的命令,但它返回一個PSObject:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select CommonFilesDir 

回答

13

我是新來的PowerShell,但似乎在PowerShell中2和3工作,如果你離開了進去-ItemProperty的註冊表值名稱,使用值名存實亡作爲屬性:

(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir 

或更短的別名:

(gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir 

沒有重複的值名稱,乾淨,它不能得到更簡潔。

+0

這是更加succunct! – 2013-09-14 21:18:59

3

什麼:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | ` 
    Select CommonFilesDir 
+1

這是更簡潔,但由於它返回一個PSObject,我需要稍後在腳本中使用點符號。這會剝離多餘的屬性,但不能完全解決問題。 – 2013-05-01 12:48:01

+9

'Get-ItemProperty HKLM:\ SOFTWARE \ Microsoft \ Windows \ CurrentVersion |選擇-expandproperty CommonFilesDir'應該讓你只是字符串。 – 2013-05-01 13:17:50

4

這是沒少麻煩,但是有如果這就是你需要一個癢不重複劃傷:

(gi HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).GetValue("CommonFilesDir") 

(我個人會使用$env:commonprogramfiles,但這是除了點。)

+2

一個很好的選擇知道,但仍然笨重。 – 2013-05-01 20:18:30

+0

除非您正在尋找其他類似的註冊表值,否則'$ env:commonprogramfiles'不太笨重,並返回相同的值。 – GlennFromIowa 2016-03-22 19:10:09

相關問題