PowerShellスクリプトでは、名前にカッコが含まれている環境変数の値はどのように取得されますか?PowerShellでは、%ProgramFiles(x86)%のようなカッコで囲まれた環境変数名は、
いくつかの変数の名前にはカッコが含まれ、その他の変数には括弧のない類似の名前が含まれています。 (cmd.exe
を使用)例:
C:\>set | find "ProgramFiles"
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
我々は%ProgramFiles%
が%ProgramFiles(x86)%
と同じではないことがわかります。
私のPowerShellコードは、括弧の後の環境変数名の部分を無視しているので、変な方法で失敗しています。これはという異なる名前のと一致しますが、既存の環境変数は失敗しません。間違った変数の正しい値を取得するだけです。
ここに私の問題を説明するためにPowerShellのスクリプト言語でのテスト関数です:
function Do-Test
{
$ok = "C:\Program Files (x86)" # note space between 's' and '('
$bad = "$Env:ProgramFiles" + "(x86)" # uses %ProgramFiles%
$d = "${ Env:ProgramFiles(x86) }" # fail (2), LINE 6
# $d = "$Env:ProgramFiles(x86)" # fail (1)
if ($d -eq $ok) {
Write-Output "Pass"
} elseif ($d -eq $bad) {
Write-Output "Fail: (1) %ProgramFiles% used instead of %ProgramFiles(x86)%"
} else {
Write-Output "Fail: (2) some other reason"
}
}
そして、ここでは出力です:
PS> Do-Test
Fail: (2) some other reason
は私がに上記の6行目に作ることができ、簡単な変更があります%ProgramFiles(x86)%の正しい値を取得しますか?
注:この記事のテキストでは、便利な省略形として環境変数にバッチファイルの構文を使用しています。たとえば、%SOME_VARIABLE%は、 "名前がSOME_VARIABLEである環境変数の値"を意味します。 PowerShellで適切にエスケープされた構文を知っていれば、私はこの質問をする必要はありません。
おそらく便利です:http://geekswithblogs.net/Lance/archive/2009/12/29/program-files-environment-variable-in-powershell.aspx – Kiquenet