我有以下PowerShell腳本:傳遞整數數組作爲命令行參數PowerShell腳本
param (
[Parameter(Mandatory=$true)][int[]]$Ports
)
Write-Host $Ports.count
foreach($port in $Ports) {
Write-Host `n$port
}
當我$ powershell -File ./test1.ps1 -Ports 1,2,3,4
運行該腳本,它的工作原理(但並不如預期):
1
1234
當我嘗試使用較大的數字時,$ powershell -File .\test.ps1 -Ports 1,2,3,4,5,6,10,11,12
,腳本完全中斷:
test.ps1 : Cannot process argument transformation on parameter 'Ports'. Cannot convert value "1,2,3,4,5,6,10,11,12" to type "System.Int32[]". Error: "Cannot convert value "1,2,3,4,5,6,10,11,12" to type "System.Int32". Error: "Input
string was not in a correct format.""
+ CategoryInfo : InvalidData: (:) [test.ps1], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,test.ps1
它看起來像powershell試圖處理通過Ports
param作爲單個數字傳遞的任何數字,但我不知道爲什麼會發生這種情況,或者如何通過它。
這很可能是由於解析你的'powershell'命令行。如果從PowerShell提示本身運行腳本(或函數),它應該按預期工作。 –
如果我沒有記錯,'-file'不喜歡參數數組。 「命令」效果更好。 'powershell -Command「&。\ test.ps1 - 端口1,2,3,4,5,6,10,11,12」'按照你想要的方式工作嗎? – BenH
似乎在Linux/OSX上運行PoSh V 6.0.0beta @BenHs提示在那裏工作很好。 – LotPings