多个强制参数集

时间:2014-08-19 11:28:35

标签: powershell

我正在处理一个包含多个参数集的函数,其中一些是必需的,一些是可选的。

这只是一个例子,但想象一下以下情况:

从AD组添加或删除用户或计算机的功能(出于某种原因,您需要区分用户和计算机)。

请记住这只是一个例子。在这种情况下,使用[string]添加/删除单个ValidateSet()参数要容易得多,但这不是重点。

所以你有4个参数集:

Param
(
    [Parameter(ParameterSetName = 'Add', Mandatory = $true)][switch] $Add,
    [Parameter(ParameterSetName = 'Remove', Mandatory = $true)][switch] $Remove,

    [Parameter(ParameterSetName = 'User', Mandatory = $true)][switch] $User,
    [Parameter(ParameterSetName = 'Computer', Mandatory = $true)][switch] $Computer
)

现在的问题是你只能使用四个参数中的一个,而不是(添加或删除)和(用户或计算机)

我知道每个参数可以使用多个参数集,但我看不到强制它有两个参数集的方法,这些参数集总是强制性的。实际上,您必须始终指定“添加”或“删除”以及“用户”或“计算机”。

如何做到这一点?

1 个答案:

答案 0 :(得分:3)

您需要为这些不同的组合定义多个参数集。 试试这个:

Function TestParamSet {
    [CmdletBinding()]
    Param
    (
        [Parameter(ParameterSetName = 'AddUser', Mandatory = $true)]
        [Parameter(ParameterSetName = 'AddComputer', Mandatory = $true)]
        [switch] $Add,

        [Parameter(ParameterSetName = 'RemoveUser', Mandatory = $true)]
        [Parameter(ParameterSetName = 'RemoveComputer', Mandatory = $true)]
        [switch] $Remove,

        [Parameter(ParameterSetName = 'AddUser', Mandatory = $true)]
        [Parameter(ParameterSetName = 'RemoveUser', Mandatory = $true)]
        [switch] $User,

        [Parameter(ParameterSetName = 'AddComputer', Mandatory = $true)]
        [Parameter(ParameterSetName = 'RemoveComputer', Mandatory = $true)]
        [switch] $Computer
    )

    Process {
        #Do Nothing
    }
}

而且,这是您在获得有关此功能的帮助时所看到的内容:

PS C:\> Get-Help TestParamSet 

NAME
    TestParamSet

SYNTAX
    TestParamSet -Add -Computer  [<CommonParameters>]

    TestParamSet -Add -User  [<CommonParameters>]

    TestParamSet -Remove -Computer  [<CommonParameters>]

    TestParamSet -Remove -User  [<CommonParameters>]


ALIASES
    None


REMARKS
    None