ValidateSet如何停止将变量更改为非设置值?

时间:2017-08-02 12:33:36

标签: powershell

我刚刚注意到,如果您在函数中使用ValidateSet作为参数变量,则不能在该函数中将参数变量更改为不在集合中的值。

以下是一个简单的示例:

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

    $Number = 4
}

Test 3

返回:

  

无法验证变量,因为值4不是Number变量的有效值。

我已使用Get-Member来探索$Number,但我无法看到它如何(或为何)限制变量的任何迹象。我假设它是某种自定义对象或强类型,但变量看起来是System.Int32。有谁知道这是怎么回事?为什么会这样?

这对于Int变量来说并不是唯一的,这只是一个简单的例子。我发现String Array参数也是如此。

1 个答案:

答案 0 :(得分:1)

我从这个相关问题中发现:Find the values in ValidateSet如果我在我的函数中执行以下操作:

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

列出了已定义的ValidateSet值。因此,我假设设置此属性是ValidateSet的工作方式,副作用是它在变量的整个生命周期中都有效。