单个参数集中的多个必需参数

时间:2016-12-06 15:33:51

标签: powershell

我希望在参数集中实现以下功能:

function [A | B] [C | D] (E) (F)

在英语中尽可能简洁,我希望A,B,C和D为Manadatory=$true,但A和B不能在同一个命令中,也不能在C和D中.E和F永远是可选的。

我想我可以使用以下逻辑扩展多个ParameterSetName属性:

function A C (E) (F)
function A D (E) (F)
function B C (E) (F)
function B D (E) (F)

但是下面的句子说每个参数集必须有一个unqiue参数,但正如你所看到的,我每次使用A和B两次。 PowerShell运行时将它们标识为唯一参数集的唯一方法是查看两个paremters,而不仅仅是一个。

  

每个参数集必须具有Windows的唯一参数   PowerShell运行时可用于公开相应的参数集

Source

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

测试后用代码编辑

所以我创建了一些模拟代码来展示我的意思:

function Test-abcdef
{
    param
    (
    [Parameter(Mandatory = $true,ParameterSetName = 'a-c')]
    [Parameter(Mandatory = $true,ParameterSetName = 'a-d')]
    $a,

    [Parameter(Mandatory = $true,ParameterSetName = 'b-c')]
    [Parameter(Mandatory = $true,ParameterSetName = 'b-d')]
    $b,

    [Parameter(Mandatory = $true,ParameterSetName = 'a-c')]
    [Parameter(Mandatory = $true,ParameterSetName = 'b-c')]
    $c,

    [Parameter(Mandatory = $true,ParameterSetName = 'a-d')]
    [Parameter(Mandatory = $true,ParameterSetName = 'b-d')]
    $d,

    [Parameter]
    $e,

    [Parameter]
    $f
)

switch ($PsCmdlet.ParameterSetName)
{
    'a-c' {
        Write-Output $a $c
        break
    }
    'a-d' {
        Write-Output $a $d
        break
    }
    'b-c' {
        Write-Output $b $c
        break
    }
    'b-d' {
        Write-Output $b $d
        break
    }
}

}


help Test-abcdef

如果您对上述功能提供帮助,则会提供以下信息:

NAME
Test-abcdef

SYNTAX
Test-abcdef -a <Object> -d <Object> [-e <Parameter>] [-f <Parameter>]  [<CommonParameters>]

Test-abcdef -a <Object> -c <Object> [-e <Parameter>] [-f <Parameter>]  [<CommonParameters>]

Test-abcdef -b <Object> -d <Object> [-e <Parameter>] [-f <Parameter>]  [<CommonParameters>]

Test-abcdef -b <Object> -c <Object> [-e <Parameter>] [-f <Parameter>]  [<CommonParameters>]

我认为这正是你想要的。

如果此帖子适合您,请将其标记为已解答

原始邮件:

我认为您需要创建4个参数集,AC,AD,BC和BD,您需要定义每个参数集中的所有参数,例如,您需要定义A两次,一次在集合AC中,一次在集AD中。

不要将E或F放在任何一组中。