我正在尝试在 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 参数集允许多项选择-LMLPHP

关于如果某些参数集,PowerShell 参数集允许多项选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43511747/

10-13 07:46
查看更多