如果从set中选择的选项,如何将param设置为强制

问题描述 投票:1回答:1

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

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

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

如果$UserID是“添加”或“删除”,我该怎么做才能输入$Command,如果“查看”是命令则不是必须的?

powershell parameter-passing
1个回答
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  []
© www.soinside.com 2019 - 2024. All rights reserved.