ブール型パラメータでValidateSetを使用しようとしていますが、期待通りに動作させることができません。ブール型パラメータのPowerShell ValidateSet
問題を再現する例:
function Set-Boolean
{
[CmdletBinding()]
[OutputType([Bool])]
Param
(
[Parameter(Mandatory=$true, Position=0)]
[ValidateNotNullOrEmpty()]
[ValidateSet($false,$true)]
[Bool] $Bool
)
Process
{
$Bool
}
}
実行時にPowerShellはTrue
とFalse
へタブ補完時に$true
と$false
変数を展開し、それぞれがこれはのみ$true
、$false
としてパラメータの検証が失敗する原因1
および0
は有効なブール型です。
ValidateSetを[ValidateSet('$false','$true')]
に変更しようとしましたが、タブの補完が期待通りに機能しますが、パラメータが文字列'$false'
と'$true'
を期待しているため、パラメータの検証はまだ失敗します。
私は[ValidateSet([bool]0,[bool]1)]
にValidateSetを変更し、私は期待していますが、私は0
と1
ブールパラメータの完成のための$true
と$false
以上の貧しいユーザーエクスペリエンスを見つけると、それが機能を持っている可能性があります。
関数の期待出力は、$true
が選択された場合はTrue
、$false
の場合はFalse
となるはずです。
私は自分のコードで回避策を実装しましたが、可能ならば、ユーザーに対してタブ補完機能を有効にするために、どのようにブール値パラメータでValidateSetを使用できるかを知りたいと思います。
あなたの代わりに '[スイッチ]'パラメータを使用して考えがありますか? –
スイッチのパラメータMarkを指摘してくれてありがとう。私はそれを考えましたが、私が直面している問題については、それはUXが貧弱になると信じています。私の関数が使用するAPIは、そのアクティビティを有効または無効にするために明示的な$ trueまたは$ falseを必要とします。私が今使用している1つのParticipateパラメータではなく、スイッチを使用するように選択した場合、スイッチを使用すると、-Enableパラメータと-Disableパラメータが必要になります。 – Persistent13
switchパラメータは、呼び出されたかどうかによって$ trueまたは$ falseに評価されるはずなので、2つは必要ないはずです。 –