我正在尝试在 PowerShell 中创建一个函数,其中有一个特定的参数开关,然后可以提供其他选择,但这些仅在此参数与主要参数结合使用时才可用。这将用于将用户添加到 AD 组。我仍在学习 ParameterSets 的工作原理。
我想要的是这样的事情成为可能:
OK:(其中 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,
)
请告知是否有任何需要澄清的内容。
最佳答案
您可以为每个多选开关(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
)
这将为您提供参数选择:
关于如果某些参数集,PowerShell 参数集允许多项选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43511747/