Powershell枚举参数

3
[Parameter (Mandatory=$False)]
[ValidateSet("Val1", "Val2", "Val3", "Val4", "Val5",ignorecase=$true)]
[string[]] $configs = ""

有没有办法修改上面的代码,使我能一次性接受多个枚举值?
我希望能够这样启动脚本:
.\MyAwesome-Script.ps1 -config Val1 Val2 (或任何组合的枚举值作为参数)
但是我需要让它也可以通过Tab键补全(这是一个词吗?)
为了完整起见,我正在使用PS 4.0,并安装了PSCX 3.1。
1个回答

8

只需将您的变量设置为数组,它就可以正常工作。考虑以下函数:

function Test-ValidateSet
{
    PARAM(
        [ValidateSet("Val1", "Val2", "Val3")]
        [string[]]$MyParam
    )

    foreach($value in $MyParam)
    {
        Write-Host "Parameter given: $value"
    }
}

对于上述方法,我在MyParam参数上获得了tab自动完成功能。要为该参数输入数组,只需用逗号分隔值即可。
Test-ValidateSet -MyParam Val1, Val2, Val3

这支持在PowerShell控制台和PowerShell ISE中都使用Tab补全。


抱歉,我做了一个小修改。你的回复几乎和我的一样,但只有第一个参数是通过制表符自动完成的。或者这就是它的限制吗? - SteveMustafa
你没有包含实际参数定义,所以我不知道。如果你正在使用PowerShell ISE并期望下拉列表,你必须按CTRL+SPACE来获取下拉列表的其他条目,但在PowerShell控制台和PowerShell ISE中按Tab键循环浏览选项应该都可以正常工作(至少在我的电脑上是这样)。 - Robert Westerlund
您说得确实没错。我道歉。 嗯,我的情况并没有展示出相同的行为。CTRL+SPACE确实会弹出下拉菜单,但是在选择了第一个枚举值之后,对于同一参数不能再使用其他枚举值,即使我正在尝试填充一个数组。 - SteveMustafa
而且你在这两个值之间加了逗号字符吗? - Robert Westerlund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接