2016-10-06 14 views
1

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 
    } 
    } 
} 

私は、引数のいずれか(NameAge)を使用していない場合は、エラーハンドラが正常に動作します。

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ブロックにエラーが発生するたびにカスタム定義されたエラーメッセージが呼び出されるようにするにはどうすればよいですか。

答えて

1

PowerShellの詳細機能についてお読みください。 これは、ここで行うことができます:あなたの機能についてはhttps://technet.microsoft.com/en-us/library/hh847743.aspx

を、あなたは、単にParameter - ブロック内Mandatoryキーワードを使用することができます。このよう :あなたが特定の範囲(ValidateRange)または特定のセット(ValidateSet)を必要とする場合

function Test 
{ 
    Param(
    [Parameter(Mandatory)] 
    [String]$Name, 
    [Parameter(Mandatory)] 
    [Int]$Age 
    ) 
    Process 
    { 
    Write-Host "My name is $name and my age is $age" 
    } 
} 

ドキュメントも説明しています。

+0

ありがとうございました。しかし、私はログファイルにエラーをリダイレクトする必要があるので、私は定義されたカスタムParamブロックからエラーを作る必要があります。私の場合、どのように必須のキーワードが役立つのか理解できません。 –

+0

投稿したコードは、パラメータがnullでない場合にのみテストされました。このチェックは、 'Mandatory'キーワードを使って行うことができます。 本当にカスタムメッセージをチェックして投げたければ、 'ValidateScript'を使うべきです。 この検証では、スクリプトブロックを入力します。 –