2017-07-12 17 views
1

ブール型パラメータでValidateSetを使用しようとしていますが、期待通りに動作させることができません。ブール型パラメータのPowerShell ValidateSet

問題を再現する例:

function Set-Boolean 
{ 
    [CmdletBinding()] 
    [OutputType([Bool])] 
    Param 
    (
     [Parameter(Mandatory=$true, Position=0)] 
     [ValidateNotNullOrEmpty()] 
     [ValidateSet($false,$true)] 
     [Bool] $Bool 
    ) 

    Process 
    { 
     $Bool 
    } 
} 

実行時にPowerShellはTrueFalseへタブ補完時に$true$false変数を展開し、それぞれがこれはのみ$true$falseとしてパラメータの検証が失敗する原因1および0は有効なブール型です。

ValidateSetを[ValidateSet('$false','$true')]に変更しようとしましたが、タブの補完が期待通りに機能しますが、パラメータが文字列'$false''$true'を期待しているため、パラメータの検証はまだ失敗します。

私は[ValidateSet([bool]0,[bool]1)]にValidateSetを変更し、私は期待していますが、私は01ブールパラメータの完成のための$true$false以上の貧しいユーザーエクスペリエンスを見つけると、それが機能を持っている可能性があります。

関数の期待出力は、$trueが選択された場合はTrue$falseの場合はFalseとなるはずです。

私は自分のコードで回避策を実装しましたが、可能ならば、ユーザーに対してタブ補完機能を有効にするために、どのようにブール値パラメータでValidateSetを使用できるかを知りたいと思います。

+1

あなたの代わりに '[スイッチ]'パラメータを使用して考えがありますか? –

+0

スイッチのパラメータMarkを指摘してくれてありがとう。私はそれを考えましたが、私が直面している問題については、それはUXが貧弱になると信じています。私の関数が使用するAPIは、そのアクティビティを有効または無効にするために明示的な$ trueまたは$ falseを必要とします。私が今使用している1つのParticipateパラメータではなく、スイッチを使用するように選択した場合、スイッチを使用すると、-Enableパラメータと-Disableパラメータが必要になります。 – Persistent13

+0

switchパラメータは、呼び出されたかどうかによって$ trueまたは$ falseに評価されるはずなので、2つは必要ないはずです。 –

答えて

1

入力変数タイプを指定せずに、オートコンプリート用にValidateSetを使用します。しかし、あなたは、この場合には、入力として01を使用することはできません。

function Set-Boolean 
{ 
    [CmdletBinding()] 
    [OutputType([Bool])] 
    Param 
    (
     [Parameter(Mandatory=$true, Position=0)] 
     [ValidateNotNullOrEmpty()] 
     [ValidateSet($false,$true)] 
     $Bool 
    ) 

    Process 
    { 
     [System.Convert]::ToBoolean($Bool) 
    } 
} 
+0

猫ですることができますか?私は、スクリプトで追加のパラメータ検証を避けるために、$ Bool変数を明示的に入力することを望んでいました。 – Persistent13

+0

パラメータはValidateSetを使用してのみ検証します。スクリプト内には検証はなく、変換だけです。そして今、スクリプトはTrueとFalseの文字列とブールバージョンを受け入れますが、それらのみです。 –

関連する問題