Igo*_*sky 3 parameters powershell
在Powershell V2中,我试图使用Param()声明来解析传递给脚本的开关.使用此脚本(example.ps1)可以说明我的问题:
Param(
[switch] $A,
[switch] $B,
[switch] $C
)
echo "$A, $B, $C"
Run Code Online (Sandbox Code Playgroud)
我的问题是这个脚本会默默地忽略任何不正确的开关.例如,"example.ps1 -asdf"将只打印"False,False,False",而不是向用户报告错误的用法.
我注意到如果我添加位置参数,行为会改变:
Param(
[switch] $A,
[switch] $B,
[switch] $C,
[parameter(position=0)] $PositionalParameter
)
echo "A:$A, B:$B, C:$C"
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行"example2.ps1 -asdf",将引发ParameterBindingException.但是,"example2.ps1 asdf"(注意没有前导破折号的参数)仍然会被默默接受.
我有两个问题:
有没有办法让Powershell总是向我的脚本报告一个额外的参数作为错误?在我的脚本中,我只想允许固定的一组开关(-A,-B,-C),任何其他参数应该是一个错误.
当检测到参数错误时,我是否可以让Powershell打印用法(即"get-help example.ps1")而不是引发ParameterBindingException?
您可以尝试使用about_Functions_CmdletBindingAttribute中的CmdletBinding
解释,在具有CmdletBinding属性的函数中,未知参数和位置参数没有匹配的位置参数会导致参数绑定失败.
[CmdletBinding()]
Param(
[switch] $A,
[switch] $B,
[switch] $C)
echo "A:$A, B:$B, C:$C"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7602 次 |
最近记录: |