paramブロックのエラーに対してカスタム定義のエラーハンドラを定義する必要がある状況があります。たとえば、paramブロック内に何らかのエラーがある場合には、終了値1を返す関数が必要で、カスタム定義のエラーメッセージも出力されます。Paramブロック内のエラーの処理
以下私のコードです:
function test {
Param(
[string]$Name,
[int]$age
)
Begin {
$ErrorVar = 0
if (! $Name) {
Write-Host "Name is a mandatory parameter...please provide a value"
$ErrorVar = 1
}
if (! $age) {
Write-Host "Age is a mandatory parameter...please provide a value"
$ErrorVar = 1
}
}
Process {
if ($ErrorVar -eq 0) {
Write-Host "My name is $name and my age is $age"
}
}
End {
if ($ErrorVar -eq 1) {
return 1
} else {
return 0
}
}
}
私は、引数のいずれか(Name
、Age
)を使用していない場合は、エラーハンドラが正常に動作します。
PS> $var = test Name is a mandatory parameter...please provide a value Age is a mandatory parameter...please provide a value PS> $var = test -Name Subhayan Age is a mandatory parameter...please provide a value
しかし、瞬間I引数に値を省略します。システム定義のエラーメッセージが表示され、エラーハンドラが呼び出されません。
PS> $var = test -Name -age 32 test : Missing an argument for parameter 'Name'. Specify a parameter of type 'System.String' and try again. At line:1 char:13 + $var = test -Name -age 32 + ~~~~~ + CategoryInfo : InvalidArgument: (:) [test], ParameterBindingException + FullyQualifiedErrorId : MissingArgument,test
引数名を使用しても値を指定できなかった場合でも、paramブロックにエラーが発生するたびにカスタム定義されたエラーメッセージが呼び出されるようにするにはどうすればよいですか。
ありがとうございました。しかし、私はログファイルにエラーをリダイレクトする必要があるので、私は定義されたカスタムParamブロックからエラーを作る必要があります。私の場合、どのように必須のキーワードが役立つのか理解できません。 –
投稿したコードは、パラメータがnullでない場合にのみテストされました。このチェックは、 'Mandatory'キーワードを使って行うことができます。 本当にカスタムメッセージをチェックして投げたければ、 'ValidateScript'を使うべきです。 この検証では、スクリプトブロックを入力します。 –