0

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

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

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

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

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

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

4

1 回答 1

0

创建两个参数集:一个仅包含 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
于 2020-02-13T13:20:46.133 回答