来自ValidateSet的Powershell多功能参数

时间:2017-01-20 11:23:46

标签: powershell parameter-passing validateset

我正在用PowerShell编写脚本,在某些时候我需要在函数参数上使用ValidateSet。这是一个非常好的功能,但我需要的不仅仅是它。

例如

Function JustAnExample
{
    param(
        [Parameter(Mandatory=$false)][ValidateSet("IPAddress","Timezone","Cluster")]
        [String]$Fields
    )

    write-host $Fields
}

所以这段代码片段允许我从列表中选择一个项目 JustAnExample -Fields IPAddress

然后将其打印到屏幕上。 我想知道是否有可能允许选择多个值并将它们从一个验证集中传递给函数

JustAnExample -Fields IPAddress Cluster

也许有一个图书馆,或者我只是错过了一些东西,但我真的找不到解决方案。

2 个答案:

答案 0 :(得分:4)

如果要将多个字符串参数传递给-Fields参数,请将其更改为数组类型([String[]]):

param(
    [Parameter(Mandatory=$false)]
    [ValidateSet("IPAddress","Timezone","Cluster")]
    [String[]]$Fields
)

并将参数与,分开,而不是空格:

JustAnExample -Fields IPAddress,Cluster

答案 1 :(得分:1)

@SokIsKedu,我有同样的问题,找不到答案。因此,我在函数内使用以下代码:

function Test-Function {
    param (
        [ValidateSet('ValueA', 'ValueB')]
        [string[]] $TestParam
    )

    $duplicate = $TestParam | Group-Object | Where-Object -Property Count -gt 1
    if ($null -ne $duplicate) {
        throw "TestParam : The following values are duplicated: $($duplicate.Name -join ', ')"
    }

    ...
}

它不会阻止重复项的传入,但是会捕获重复项。