如果从集合中选择选项,如何将参数设置为强制性

时间:2019-03-12 00:09:32

标签: powershell parameter-passing

我有以下参数输入和用户可以键入的三个选择:

Param(
    [Parameter(Mandatory=$true)]
    [ValidateSet('View','Add','Remove')]
    [String]$Command,

    [Parameter(Mandatory=$false)]
    [String]$UserID
)

如果$UserID是“添加”或“删除”,如何强制输入$Command,而如果命令是“查看”,则不是强制输入?

1 个答案:

答案 0 :(得分:1)

在AFAICS上,您需要针对所要查询的内容使用动态参数(例如,参见here)。就个人而言,尽管如此,我还是建议使用不同的(静态)参数集:

[CmdletBinding(DefaultParameterSetName='View')]
Param(
    [Parameter(ParameterSetName='Add', Mandatory=$true)]
    [Switch]$Add,

    [Parameter(ParameterSetName='Remove', Mandatory=$true)]
    [Switch]$Remove,

    [Parameter(ParameterSetName='View', Mandatory=$true)]
    [Switch]$View,

    [Parameter(ParameterSetName='Add', Mandatory=$true)]
    [Parameter(ParameterSetName='Remove', Mandatory=$true)]
    [Parameter(ParameterSetName='View', Mandatory=$false)]
    [String]$UserID
)

switch ($PSCmdlet.ParameterSetName) {
    'Add'    { ... }
    'Remove' { ... }
    'View'   { ... }
}

用法:

PS C:\> test.ps1 -?
test.ps1 -View [-UserID ] []
test.ps1 -Add -UserID  []
test.ps1 -Remove -UserID  []