参数集:需要特定的参数组合

时间:2018-07-11 15:57:48

标签: powershell

我试图将我的头放在参数集上。似乎很直截了当,直到需要使用AB或同时使用A & B为止。我基本上必须能够说,在两个参数中,至少必须提供一个。

这是我当前正在使用的代码示例(不带参数集),但这只能传递$c

Function Test-Params
{
    Param
    (
        [string[]]
        $a,
        [string[]]
        $b,
        [Parameter(Mandatory=$true)]
        [string]
        $c
    )
}

是否可以使用参数集来处理此问题,或者在函数内执行某种形式的验证是否更合适?

我希望以下内容被接受:

Test-Params -a $arr_a -c "C:\test.txt"
Test-Params -b $arr_b -c "C:\test.txt"
Test-Params -a $arr_a -b $arr_b -c "C:\test.txt"

1 个答案:

答案 0 :(得分:2)

为要接受的每个选项定义多个参数集(blog on this):

Function Test-Params {
    Param (
        [Parameter(ParameterSetName='AC', Mandatory=$True)]
        [Parameter(ParameterSetName='ABC', Mandatory=$True)]
        [string[]]$a,

        [Parameter(ParameterSetName='BC', Mandatory=$True)]
        [Parameter(ParameterSetName='ABC', Mandatory=$True)]
        [string[]]$b,

        [Parameter(ParameterSetName='AC', Mandatory=$True)]
        [Parameter(ParameterSetName='BC', Mandatory=$True)]
        [Parameter(ParameterSetName='ABC', Mandatory=$True)]
        [string]$c
    )

    $a
    $b
    $c
}

这些将被接受

Test-Params -a ParamA -c ParamC
Test-Params -b ParamB -c ParamC
Test-Params -a ParamA -b ParamB -c ParamC

但是,如果您只尝试AB,它将使用ParameterSetName='ABC'并提示输入C,因为这在该集合中也是必需的。

C:\> Test-Params -a ParamA -b ParamB
cmdlet Test-Params at command pipeline position 1
Supply values for the following parameters:
c: