2017-04-20 42 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

我認爲馬丁已經回答了這個問題。如果您想爲條件選項使用相同的參數名稱,則還可以使用動態參數。