2017-04-20 62 views
2

我想在PowerShell中创建一个函数,其中有一个特定的参数开关,然后给出其他选择,但这些仅适用于如果此参数与主要的一个。这将用于将用户添加到AD组。我仍然在学习ParameterSets的工作方式。PowerShell参数集允许多项选择,如果某些参数集

我要的是这样的事情成为可能:

确定:(其中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, 
) 

请告知是否有任何需要澄清。

回答

2

您可以为每个多选开关(Access4,5和6)定义一个参数集。不过,我会用一个作为参数与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

+1

只是检查,虽然,该设置,我可以选择多个选择,或者只是一个单一的选择?这在这里是必需的。 – TimothyWaring

+0

您必须在验证集中选择**一个**字符串。 –

+1

或者让['string []] $ Access4'(ISE不显示第二个参数的菜单,但是TAB有效) –

0

我认为马丁已经回答了这个问题。如果您想为条件选项使用相同的参数名称,则还可以使用动态参数。