【问题标题】:Require all parameters, if one of the parameters in a parameterset is set如果设置了参数集中的参数之一,则需要所有参数
【发布时间】:2020-02-13 21:20:46
【问题描述】:

我想强制参数集中的所有参数,但前提是实际指定了其中一个参数(全或无情况)。 所以我希望能够将我的函数称为Test-Mandatory -Param1Test-Mandatory -Param1 -Param2 -Param3。所以当我指定 Param2 时,我希望 Param3 是强制性的,反之亦然。

我原以为以下内容可以实现这一目标:

Function Test-Mandatory
{
    Param
    (
        [switch]$Param1,

        [Parameter(ParameterSetName='Set1', Mandatory)]
        [switch]
        $Param2,

        [Parameter(ParameterSetName='Set1', Mandatory)]
        [switch]
        $Param3
    )
}

但是,当我使用上述方法时,我无法将该函数调用为Test-Mandatory -Param1,因为它会提示我为 param2/param3 提供一个值。 我知道我可以添加另一个参数,将其添加到集合中,并使其成为非强制性的,这将使我能够使用开关在参数集之间切换,但我宁愿不这样做。 还有其他方法可以解决我忽略的问题吗?

【问题讨论】:

    标签: powershell parameters parameter-sets


    【解决方案1】:

    创建两个参数集:一个仅包含 Param1,第二个包含所有三个参数。由于您只能在 Param() 中指定每个参数一次,因此您可以通过向 Param1 添加两个集合属性来实现。

    Function Test-Mandatory
    {
        [CmdletBinding(DefaultParametersetName='Set1')]
        Param
        (
            [Parameter(ParameterSetName='Set1', Mandatory=$true)]
            [Parameter(ParameterSetName='Set2', Mandatory=$true)]
            [switch]$Param1,
    
            [Parameter(ParameterSetName='Set2', Mandatory=$true)]
            [switch]$Param2,
    
            [Parameter(ParameterSetName='Set2', Mandatory=$true)]
            [switch]$Param3
        )
    }
    
    Test-Mandatory -Param1  # works
    Test-Mandatory -Param1 -Param2  # asks for param3
    

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      相关资源
      最近更新 更多