Как установить параметр как обязательный, если выбор выбран из набора - PullRequest
1 голос
/ 12 марта 2019

У меня есть следующий параметр ввода и три варианта, которые пользователь может набрать:

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

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

Как я могу сделать так, чтобы было обязательно ввести $UserID, если $Command это либо «Добавить», либо«Удалить», хотя не обязательно, если «Вид» является командой?

1 Ответ

1 голос
/ 12 марта 2019

AFAICS вам нужны динамические параметры для того, что вы спрашиваете (см., Например, здесь ). Лично я бы рекомендовал использовать различные (статические) наборы параметров, хотя:

[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:\> <b>test.ps1 -?</b>
test.ps1 -View [-UserID ] []
test.ps1 -Add -UserID  []
test.ps1 -Remove -UserID  []
...