5

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

例如

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

    write-host $Fields
}

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

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

JustAnExample -Fields IPAddress Cluster

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

4

2 回答 2

7

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

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

,并用而不是空格分隔参数:

JustAnExample -Fields IPAddress,Cluster
于 2017-01-20T11:49:26.650 回答
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 ', ')"
    }

    ...
}

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

于 2020-02-14T18:45:30.640 回答