与Powershell的双重互斥参数

Ste*_*e B 5 powershell

我正在编写一个具有多个可能参数的自定义PowerShell函数.

function foo {
    param(
        [Parameter(Mandatory=$true)]
        [string]$param1_A,
        [Parameter(Mandatory=$true)]
        [int]$param1_B,

        [Parameter(Mandatory=$true)]
        [string]$param2_A,
        [Parameter(Mandatory=$true)]
        [int]$param2_B
    )

}
Run Code Online (Sandbox Code Playgroud)

我基本上有两组互斥参数.我可以指定$param1_A或者$param1_B,但不能同时指定两者.我也可以指定$param2_A或者$param2_B,但不能同时指定.

总而言之,这是一个可能的调用表:

  • foo -param1_A -param2_A
  • foo -param1_B -param2_A
  • foo -param1_A -param2_B
  • foo -param1_B -param2_B

在所有情况下,至少有一个参数是强制性的.

如何声明我的参数以强制执行此要求?

我试图使用不同的参数集,但我没有成功,因为我没有找到一种方法来描述至少一个参数的概念.

如果它可以帮助,我有实用功能,可以转换$param1_A$param1_B$param2_A$param2_B.

Ste*_*e B 8

好的,我设法使用参数集.我之前没有理解的是,我可以[Parameter]在同一个参数上声明多个属性.因此,正如建议的mjolinor,我实际上可以使用参数集.

这是我的功能的更新代码:

function foo {
    param(
        [Parameter(Mandatory=$true, ParameterSetName='A')]
        [Parameter(Mandatory=$true, ParameterSetName='C')]
        [string]$param1_A,
        [Parameter(Mandatory=$true, ParameterSetName='B')]
        [Parameter(Mandatory=$true, ParameterSetName='D')]
        [int]$param1_B,

        [Parameter(Mandatory=$true, ParameterSetName='A')]
        [Parameter(Mandatory=$true, ParameterSetName='B')]
        [string]$param2_A,
        [Parameter(Mandatory=$true, ParameterSetName='C')]
        [Parameter(Mandatory=$true, ParameterSetName='D')]
        [int]$param2_B
    )

     $PSCmdlet.ParameterSetName
}

Foo -param1_A 1 -param2_A "1"
Foo -param1_B 1 -param2_A "1"
Foo -param1_A 1 -param2_B "1"
Foo -param1_B 1 -param2_B "1"
Run Code Online (Sandbox Code Playgroud)

将输出:

A
B
C
D
Run Code Online (Sandbox Code Playgroud)