Требовать все параметры, если установлен один из параметров в наборе параметров - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу сделать все параметры в наборе параметров обязательными, но только если фактически указан один из параметров (все или ни одной ситуации). Поэтому я хочу иметь возможность вызывать мою функцию как Test-Mandatory -Param1 или Test-Mandatory -Param1 -Param2 -Param3. Поэтому, когда я указываю Param2, я хочу, чтобы Param3 был обязательным, и наоборот.

Я бы подумал, что что-то вроде следующего достигнет этого:

Function Test-Mandatory
{
    Param
    (
        [switch]$Param1,

        [Parameter(ParameterSetName='Set1', Mandatory)]
        [switch]
        $Param2,

        [Parameter(ParameterSetName='Set1', Mandatory)]
        [switch]
        $Param3
    )
}

Однако, когда я используйте вышеупомянутое, я не могу вызвать функцию как Test-Mandatory -Param1, поскольку это побудит меня предоставить значение для param2 / param3. Я знаю, что мог бы добавить другой параметр, добавить это в набор и сделать его необязательным, это позволило бы мне переключаться между наборами параметров с помощью переключателя, но я бы предпочел этого не делать. Есть ли другой способ решить это, что я пропускаю?

1 Ответ

0 голосов
/ 13 февраля 2020

Создайте два набора параметров: один только с Param1 и второй со всеми тремя параметрами. Поскольку вы можете указать каждый параметр только один раз внутри Param (), вы можете сделать это, добавив два набора атрибутов в Param1.

Function Test-Mandatory
{
    [CmdletBinding(DefaultParametersetName='Set1')]
    Param
    (
        [Parameter(ParameterSetName='Set1', Mandatory=$true)]
        [Parameter(ParameterSetName='Set2', Mandatory=$true)]
        [switch]$Param1,

        [Parameter(ParameterSetName='Set2', Mandatory=$true)]
        [switch]$Param2,

        [Parameter(ParameterSetName='Set2', Mandatory=$true)]
        [switch]$Param3
    )
}

Test-Mandatory -Param1  # works
Test-Mandatory -Param1 -Param2  # asks for param3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...