我正在尝试在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,
)
如果有任何需要澄清,请告知。
答案 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
)