在 Powershell V2 中,我尝试使用 Param() 声明来解析传递给脚本的开关。我的问题可以使用这个脚本(example.ps1)来说明:
Param(
[switch] $A,
[switch] $B,
[switch] $C
)
echo "$A, $B, $C"
我的问题是这个脚本会默默地忽略任何不正确的开关。例如,“example.ps1 -asdf”只会打印“False, False, False”,而不是向用户报告不正确的使用情况。
我注意到如果添加位置参数,行为会发生变化:
Param(
[switch] $A,
[switch] $B,
[switch] $C,
[parameter(position=0)] $PositionalParameter
)
echo "A:$A, B:$B, C:$C"
现在,如果我运行“example2.ps1 -asdf”,将引发 ParameterBindingException。但是,“example2.ps1 asdf”(注意没有前导破折号的参数)仍将被静默接受。
我有两个问题:
有没有办法让 Powershell 总是向我的脚本报告一个额外的参数作为错误?在我的脚本中,我只想允许一组固定的开关(-A、-B、-C),而任何其他参数都应该是错误的。
当检测到参数错误时,我可以让 Powershell 打印用法(即“get-help example.ps1”)而不是引发 ParameterBindingException 吗?