2011-08-29 6 views
7

私は明らかにした以外の選択肢はありませんが、インターネットの総合的な脳を選びたいと思っています。Powershellでスイッチパラメータを必須としてマークする方法

ブール値をカスタム関数に渡すときは、[switch]パラメータを使用することをお勧めします。しかし、私はswitchパラメータを必須としてマークしたい場合がいくつかあります。これはオプションで[パラメータ(Mandatory = $ true)]によって実行できます。しかし、私は実際に表示されるUIプロンプトが嫌いです。私は例外を投げる方がはるかに好きです。

スイッチはtrueまたはfalseのいずれかになり、 "IsPresent"プロパティは区別しません。スイッチのパラメータを(例:$ false)とすれば、スイッチは$ example.IsPresentがfalseであることを報告します

私は[bool]を使用しています。例:

param 
(
    [bool]$theValue = $(throw('You didn't specify the value!')) 
); 

私が引き出すことができる他のトリックはありますか?

+0

? 'example'と' exampleOff'です。そして、 'IsPresent'もどちらもエラーを投げないとき。 – jpaugh

答えて

17

ところで、switchパラメータは常に必須です。指定しない場合、値はfalseになります。指定した場合(-var)、値はtrueになり、値も指定すると(-var:$false)、指定された値が取得されます。

スイッチを指定する必要がある状況を考えることはできません。指定しない場合はfalseです。そのような単純な。

具体的には、paramの値がtrueまたはfalseであることを言いたいと思いますか?その場合は、あなたが言及boolバージョンは、それがあまりにもswitchと同じように動作しますけれども、私は、のために行くだろうかです:

$example.IsPresentに関する
param([switch]$a = $(throw "You didn't specify the value")) 

も ​​- 私は、それが壊れた/直感的ではありません知っていますスイッチ変数自体の値と同じです。すなわちSwitch Paramaterのコンストラクタが定義されている方法であり、それが持っている唯一のプロパティはIsPresentある:

スイッチが存在するかどうかを識別するブール値 を含む新しいSwitchParameterオブジェクトを作成します。二つのスイッチを持っていないのはなぜ

http://msdn.microsoft.com/en-us/library/system.management.automation.switchparameter.ctor%28v=vs.85%29.aspx

+0

例外メッセージがあなたに気になるものなら、これはあなたが得る最高です。 –

+1

私は間違ってパラメータリストで "スイッチ"を使用すると、エラーをスローすることは動作しないと結論していた。私はこれをもう一度試しました、そして、それは行くのが良いようです。 manojldsの答えは正確で非常に詳細です。 –

+0

-var:$ falseは私が探していたものでした。ありがとう! –

関連する問題