Требовать все параметры, если установлен один из параметров в наборе параметров

Я хочу сделать все параметры в наборе параметров обязательными, но только в том случае, если один из параметров действительно указан (все или ничего). Итак, я хочу иметь возможность вызывать свою функцию как 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. Я знаю, что могу добавить еще один параметр, добавить его в набор и сделать его необязательным, это позволило бы мне переключаться между наборами параметров с помощью переключателя, но я бы не стал этого делать. Есть ли другой способ решить эту проблему, которую я не замечаю?


person DEVries    schedule 13.02.2020    source источник


Ответы (1)


Создайте два набора параметров: один только с 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
person AdamL    schedule 13.02.2020