来自 ValidateSet 的 Powershell 多函数参数

Powershell multiple function params from 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

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

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

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

并用 , 代替 space:

分隔参数
JustAnExample -Fields IPAddress,Cluster

@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 ', ')"
    }

    ...
}

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