假设我们有以下SwitchTest.ps
脚本使用PowerShell的调用(&)运算符来调用PowerShell脚本与开关参数
param(
[switch]$Flag = $false
)
echo "Flag: $Flag"
预期以下工作:
& ".\SwitchTest.ps1" -Flag
Flag: True
尽管如此,这并不
& ".\SwitchTest.ps1" "-Flag"
Flag: False
此外,如果我们将SwitchTest.ps
修改为是这样的:
param(
[switch]$Flag = $false,
[string]$Str = $null
)
echo "Flag: $Flag"
echo "Str: $Str"
我们得到这个预期的行为:
& ".\SwitchTest.ps1" -Flag
Flag: True
Str:
而且这个意外之一:
& ".\SwitchTest.ps1" "-Flag"
Flag: False
Str: -Flag
我试过-Flag true
,-Flag $true
,-Flag:$true
...没有雪茄。看起来开关参数在引用时会被“跳过”(即当它是一个正确的字符串时) - 为什么?如果我想以编程方式构建"-Flag"
,我该怎么办?
一个字符串总是一个字符串......如果要执行存储在一个字符串中的命令,建议使用'iex'作为@briantist。 –
看看这篇文章是否有助于清除它:[在PowerShell中运行可执行文件](http://windowsitpro.com/powershell/running-executables-powershell)。 –
我觉得来自文档的这句话是你不想在这里的:_因为调用操作符不解析命令,它不能解释命令参数._我倾向于与Briantist一起。这不是它的目的。为什么使用调用操作符时应该只能在调用脚本时忽略它(测试以防万一)? – Matt