假設我們有以下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