Есть ли способ определить набор параметров PowerShell без параметров?

У меня есть несколько довольно сложных функций, которые я пишу для библиотечного модуля, с множеством различных способов его вызова. Тем не менее, на самом деле возможно по умолчанию все из них, но когда я пытаюсь вызвать мою функцию без параметров, вызов завершается неудачно, потому что набор параметров не может быть определен.

Я хотел бы определить набор параметров, который не содержит никаких параметров, такой, что вызовы без параметров успешны. Это трудно сделать, так как ParameterSetName является свойством атрибута Parameter, и ничего нельзя приписать.

Я экспериментировал со свойством DefaultParameterSet атрибута CmdletBinding, который находится в блоке param, однако, похоже, ничего не получалось. Кажется, что имя набора параметров, определенное там, должно действительно существовать, чтобы Powershell использовал его по умолчанию.

В настоящее время мое лучшее приближение к этому варианту использования состоит в том, чтобы определить, что один из наборов параметров не имеет обязательных параметров, однако они завершаются ошибкой, когда передаются пустые строки или нули, и я бы хотел, чтобы этого не произошло.

Это возможно?

1 ответ

Решение

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

function Foo {
    [CmdletBinding(DefaultParameterSetName='x')]
    Param(
        [Parameter(Mandatory=$true, ParameterSetName='y')]$a,
        [Parameter(Mandatory=$false, ParameterSetName='y')]$b,
        [Parameter(Mandatory=$true, ParameterSetName='z')]$c,
        [Parameter(Mandatory=$false)]$d
    )

    "`$a: $a"
    "`$b: $b"
    "`$c: $c"
    "`$d: $d"
}
Другие вопросы по тегам