位置参数绑定值以减号/连字符开头

时间:2015-06-13 17:43:54

标签: powershell parameter-passing

这是我的PowerShell测试脚本:

param( 
   [Parameter(Mandatory=$true,
              Position=0)]
   [int]$val
)
Write-Output $val;

现在我想这样称呼它:

Powershell -ExecutionPolicy Bypass -File ".\testscript.ps1" "-1"

我得到的错误是:

  

找不到与参数名称匹配的参数' 1'。

请注意,我无法控制应用程序调用脚本的方式(即我无法使应用程序使用-val:-1调用我的脚本)。所以绑定必须是位置的。如何使用-1块将我的脚本绑定到$valparam

1 个答案:

答案 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