我刚刚注意到,如果您在函数中使用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参数也是如此。
答案 0 :(得分:1)
我从这个相关问题中发现:Find the values in ValidateSet如果我在我的函数中执行以下操作:
(Get-Variable 'Number').Attributes.ValidValues
列出了已定义的ValidateSet
值。因此,我假设设置此属性是ValidateSet
的工作方式,副作用是它在变量的整个生命周期中都有效。