在 PowerShell 脚本中,如何获取名称包含括号的环境变量的值?
为了让事情更加复杂,一些变量的名称包含括号,而其他变量具有类似的没有括号的名称。例如(使用
为了让事情更加复杂,一些变量的名称包含括号,而其他变量具有类似的没有括号的名称。例如(使用
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中正确转义的语法,我就不需要问这个问题了。