PowerShell参数集允许在特定参数集下进行多项选择

3
我正在尝试在PowerShell中创建一个函数,其中有一个特定的参数开关,然后会给出其他选项,但只有在与主要参数一起使用时才能使用这些选项。这将用于将用户添加到AD组中。我仍在学习ParameterSet的工作原理。
我想要实现的是类似下面这样的功能:
可行:(其中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,
)

请告知是否需要澄清其中任何内容。
1个回答

4

对于每个多选开关(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
)

这将为您提供参数选择: 在此输入图像描述

1
只是确认一下,对于这个设置,我可以选择多项选择吗,还是只能选一个?因为这里需要。 - TimothyWaring
你必须从验证集中选择一个字符串。 - Martin Brandl
1
或者将其改为[string[]]$Access4(ISE不会显示第二个参数的菜单,但是TAB键有效)。 - Frode F.
谢谢Frode,我应该想到了。还有谢谢Martin。看起来那会起作用。在我的学习和研究中,我还没有接触过验证集。 - TimothyWaring
不客气。您可能想要查看关于函数高级参数。请考虑使用绿色勾号接受答案。 - Martin Brandl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接