在Powershell V2中,我试图使用Param()声明来解析传递到脚本中的开关。我的问题可以用这个脚本(example.ps1)来说明:
我的问题是,这个脚本会默默地忽略任何不正确的开关。例如,“example.ps1 -asdf”只会打印“False,False,False”,而不是向用户报告不正确的用法。
我注意到,如果我添加一个位置参数,行为会发生变化:
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异常?