2017-08-02 4 views
1

私は、ファンクション内のパラメータ変数にValidateSetを使用している場合、そのファンクション内では、そのパラメータ変数をセット内にない値に変更できないことに気付きました。ここでValidateSetは、変数が設定されていない値に変更されるのをどのように停止しますか?

は、実証するための簡単な例です:

Function Test { 
    [cmdletbinding()] 
    Param(
     [ValidateSet(1,2,3)] 
     [int]$Number 
    ) 

    $Number = 4 
} 

Test 3 

戻り値:値4は、Number変数の有効な値ではありませんので、

変数を検証することはできません。

私は$Numberを探索するGet-Memberを使用していると私はそれがこのような変数を制限する方法(または、なぜ)のいずれかの表示を見ることができません。私はそれが何らかの種類のカスタムオブジェクトまたは強い型指定だと仮定していますが、変数はSystem.Int32のように見えます。誰がどのように/なぜこれが起こるか知っていますか?

これはInt変数に固有のものではありません。これは単なる例に過ぎません。私はString Arrayのパラメータで同じことが分かっています。

答えて

1

私はこの関連の質問から発見された:私は私の関数の内部で、次なければというFind the values in ValidateSet

(Get-Variable 'Number').Attributes.ValidValues 

これが定義されValidateSet値を示します。したがって、この属性を設定すると、ValidateSetがどのように機能するのかが分かり、副作用は変数の存続期間を通じて有効になるということです。

+0

どこかにPowerShell wikiがある場合は、この情報をここに配置することを強くお勧めします。 –

+2

FWIW、代入の "強い"型制約についても同じです。 '[bool] $ a = $ true;(変数a).Attributesと$ b = $ true;(変数b).Attributes' –

関連する問題