ValidateScriptのエラーメッセージをわかりやすくする

ValidateScriptを使うとより厳密なパラメータのチェックが出来るので便利よね

function Test-ValidateScript {
    param(
        [parameter(Mandatory,Position=0)]
        [ValidateScript({$_ % 2 -eq 1})]
        [int] $OddNumber
    )
    $OddNumber
}

でも

PS> Test-ValidateScript 2
Test-ValidateScript : パラメーター 'OddNumber の引数を確認できません。値 "2" が指定された引数の "$_ % 2 -eq 1" 検証スクリプトで結果として True が返されませんでした。検証スクリプトが失敗した理由を確認し、コマンドを再度実行してください。
発生場所 行:1 文字:21
+ Test-ValidateScript 2
+                     ~
    + CategoryInfo          : InvalidData: (:) [Test-ValidateScript]、ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Test-ValidateScript

エラーメッセージが嫌!
条件式がそのまま出てきちゃうしなんだか分かりづらいんですよねぇ…
これはちょっとどうにかしたいのでちょっと調べた

throwするだけだった

function Test-ValidateScript {
    param(
        [parameter(Mandatory,Position=0)]
        [ValidateScript(
            {
                if ($_ % 2 -eq 1)
                {
                    return $true
                }
                throw "( ‘(I¥‘) <偶数($($_))はダメ."
            }
        )]
        [int] $OddNumber
    )
    $OddNumber
}

書く時はreturn $trueしたりといささか冗長だけど

PS> Test-ValidateScript 2
Test-ValidateScript : パラメーター 'OddNumber の引数を確認できません。( ‘(I¥‘) <偶数(2)はダメ.
発生場所 行:1 文字:21
+ Test-ValidateScript 2
+                     ~
    + CategoryInfo          : InvalidData: (:) [Test-ValidateScript]、ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Test-ValidateScript

やったね☆

まぁ他のValidate某系はみな同じ問題を抱えてるわけだが!
少なくともValidateScriptくらいは好きにしましょうというお話でした

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中