2016-04-15 10 views
8

私はそうのように私のPowerShellの関数のパラメータの1にValidateSet属性を使用しています:私はこれを繰り返してきたPowerShell関数パラメータのValidateSet属性で定数を使用できますか?

[ValidateSet('Development','Test','Production')] 
[string]$Context 

は、スクリプトプロジェクト全体で多くの場所です。これらのリテラル文字列を定数で置き換えることはできますか?

答えて

8

いいえ、リテラルまたはスクリプトブロックである必要があります。 scriptblockオプションは、それを実行する代わりにscriptblockのリテラル(文字列)値を使用するように思われるので、意味がないようです。

私のテストでは、事実上、リテラルを使用する必要があります。

代わりに動的パラメータを使用すると、これを実現できますが、それはちょうどDRYになることを余儀なくされます。

変数を使用しようとすると、機能しません(また、ISEによって赤い詰まりが発生します)。ヘルプテキストは、それが定数でなければならないと誤って言っていますが、リテラルを意味します。

私は定数を作成しました:

Set-Variable -Option Constant 

そして、それはまだ動作しません。

+1

私はValidateScriptでより良い結果を得ました。私は関数IsValidContextを作成しました。少なくとも私は文脈の文字列を1つの場所に保持し、後で有効なもののリストをあまり騒がすことなく拡張することができます。 ( [ValidateScript({IsValidContext $ _})] [文字列] $ Context ) –

+1

@MatthewMacFarlandええと、それは完全な方法でタブしません。 – briantist

+0

@MatthewMacFarlandとあなたが他の人のために役立つ場合には別の答えとしてそれを追加することができます:) – briantist

関連する問題