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
PowerShellは初めてですが、Get-ItemPropertyでレジストリ値の名前を省略し、値の名前をプロパティとしてのみ使用すると、PowerShell2および3で機能するようです。
(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir
またはエイリアスでさらに短く:
(gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir
値の名前の繰り返しはなく、クリーンであり、これ以上簡潔にすることはできません。
これはそれほど不格好ではありませんが、それがあなたが掻く必要があるかゆみであるならば、繰り返しはありません:
(gi HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).GetValue("CommonFilesDir")
(個人的には$env:commonprogramfiles
を使用しますが、それだけではありません。)
どうですか:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | `
Select CommonFilesDir
マイク・シェパードが自分で投稿していないので、ここでマイク・シェパードの回答を複製します(ムサーブの回答の下のコメントを参照)。コードに変数の名前を入れる必要がないので、より良いです。
だからあなたはこれを取ることができます:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select -expandproperty CommonFilesDir
そして代わりにこれを行います:
$w = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
$q = "CommonFilesDir"
Get-ItemProperty $w | Select -expandproperty $q