【问题标题】:Powershell multiple function params from ValidateSet来自 ValidateSet 的 Powershell 多个函数参数
【发布时间】:2017-06-05 09:00:45
【问题描述】:

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

例如

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

    write-host $Fields
}

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

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

JustAnExample -Fields IPAddress Cluster

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

【问题讨论】:

    标签: powershell parameter-passing validateset


    【解决方案1】:

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

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

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

    JustAnExample -Fields IPAddress,Cluster
    

    【讨论】:

    • 我还有一个问题。有没有办法让这些选择独一无二?因为当我运行程序时,我可以选择 2 个或更多相同的值。所以我想要的是让用户只能从给定列表中选择一个值。我正在阅读social.technet.microsoft.com/wiki/contents/articles/…,但找不到与此问题有关的任何信息
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 2015-08-18
      • 2014-08-30
      • 1970-01-01
      • 2011-08-12
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多