PowerShell参数集允许在特定参数集

时间:2017-04-20 06:24:27

标签: powershell

我正在尝试在PowerShell中创建一个函数,其中有一个特定的参数开关然后给出其他选择,但这些仅在此参数与主参数一起使用时可用。这将用于将用户添加到AD组。我还在学习ParameterSets的工作原理。

我想要的是这样的事情:

好的:(其中21和22是多选开关

Set-UserAccess -user Username -Access1 -Access2 -Access21
Set-UserAccess -user Username -Access1 -Access2 -Access21 -Access22
Set-UserAccess -user Username -Access1 -Access2 -Access22
Set-UserAccess -user Username -Access2 -Access22

不行:

Set-UserAccess -user Username -Access1 -Access21
Set-UserAccess -user Username -Access1 -Access2
Set-UserAccess -Access21

请告知如何创建参数集以允许此操作。

基本上我到目前为止(重新命名为这个问题的通用)

[CmdletBinding(DefaultParameterSetName='Default')]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)][string[]]
$user,
[Parameter()][switch]$Access1,
[Parameter()][switch]$Access2,
[Parameter()][switch]$Access3,
[Parameter(ParameterSetName='Access4')][Switch]$Access4,
[Parameter(ParameterSetName='Access4')][Switch]$Access4Choice1,
[Parameter(ParameterSetName='Access4')][Switch]$Access4Choice2,
)

如果有任何需要澄清,请告知。

1 个答案:

答案 0 :(得分:4)

您可以为每个多选开关(Access4,5和6)定义参数集。但是,我会使用 string 作为参数,并使用 ValidateSet

[CmdletBinding(DefaultParameterSetName='Default')]
Param
(
    [Parameter(Mandatory=$true,
    ValueFromPipelineByPropertyName=$true,
    Position=0)][string[]]
    $user,
    [switch]$Access1,
    [switch]$Access2,
    [switch]$Access3,
    [ValidateSet("Access4Choice1", "Access4Choice2", "Access4Choice3")]
    [string]$Access4
)

这将为您提供参数选择: enter image description here