web-dev-qa-db-ja.com

(Get-ItemProperty $ key $ valueName)._ VALUENAME_?よりもレジストリ値を文字列として取得するより簡潔な方法

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

独自のエイリアスを作成する以外に、プロパティ名を2回作成せずに、stringを取得する方法はありますか?

次のコマンドを実行できますが、PSObjectが返されます。

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

PowerShellは初めてですが、Get-ItemPropertyでレジストリ値の名前を省略し、値の名前をプロパティとしてのみ使用すると、PowerShell2および3で機能するようです。

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

またはエイリアスでさらに短く:

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

値の名前の繰り返しはなく、クリーンであり、これ以上簡潔にすることはできません。

13
jlalughery

これはそれほど不格好ではありませんが、それがあなたが掻く必要があるかゆみであるならば、繰り返しはありません:

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

(個人的には$env:commonprogramfilesを使用しますが、それだけではありません。)

4
x0n

どうですか:

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

マイク・シェパードが自分で投稿していないので、ここでマイク・シェパードの回答を複製します(ムサーブの回答の下のコメントを参照)。コードに変数の名前を入れる必要がないので、より良いです。

だからあなたはこれを取ることができます:

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

そして代わりにこれを行います:

$w = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
$q = "CommonFilesDir"
Get-ItemProperty $w | Select -expandproperty $q
0
Chris