这是我的PowerShell测试脚本:
param(
[Parameter(Mandatory=$true,
Position=0)]
[int]$val
)
Write-Output $val;
现在我想这样称呼它:
Powershell -ExecutionPolicy Bypass -File ".\testscript.ps1" "-1"
我得到的错误是:
找不到与参数名称匹配的参数' 1'。
请注意,我无法控制应用程序调用脚本的方式(即我无法使应用程序使用-val:-1
调用我的脚本)。所以绑定必须是位置的。如何使用-1
块将我的脚本绑定到$val
到param
?
答案 0 :(得分:3)
如果您无法修复应用程序调用脚本的方式,我看到的唯一其他选项是完全删除命名参数并改为使用$args
集合:
C:\>type test.ps1
[int]$val = $args[0]
Write-Output $val
C:\>powershell -ExecutionPolicy Bypass -File test.ps1 -1
-1
通过将参数强制转换为[int]
,类型安全仍然可以执行:
C:\>powershell -ExecutionPolicy Bypass -File test.ps1 a
Cannot convert value "a" to type "System.Int32". Error: "Input string was not
in a correct format."
At C:\Users\cobalt\Documents\test\test.ps1:1 char:1
+ [int]$val = $args[0]
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransforma...
+ FullyQualifiedErrorId : RuntimeException