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.ps1asdf」(先頭にダッシュがないパラメーターに注意)は引き続きサイレントに受け入れられます。
2つの質問があります:
Powershellにスクリプトへの追加の引数を常にエラーとして報告させる方法はありますか?私のスクリプトでは、スイッチの固定セット(-A、-B、-C)を許可したいだけで、他のパラメーターはエラーになるはずです。
パラメータエラーが検出された場合、ParameterBindingExceptionを発生させる代わりに、Powershellに使用法(つまり、「get-helpexample.ps1」)を出力させることはできますか?