Передача значений ParameterSet другому ParameterSet вызывает исключение AmbiguousParameterSet

Я пытаюсь вызвать функцию PowerShell с набором параметров, используя другую функцию PowerShell с набором параметров. В коде ниже я хочу позвонить Entry-Point используя либо -ABC или же -DEF Переключатель, а не оба. Тем не менее, когда я бегу Entry-Point с любым количеством параметров, я получаю AmbiguousParameterSet Исключение ниже.

function My-Function {
    [CmdletBinding(DefaultParameterSetName='ABC')]
    Param(
        [Parameter(Mandatory=$false, ParameterSetName='ABC', Position=1)]
        [switch] $ABC,

        [Parameter(Mandatory=$false, ParameterSetName='DEF', Position=1)]
        [switch] $DEF,

        [switch] $Extra
    )

    echo $ABC
    echo $DEF
    echo $Extra
}


function Entry-Point {
    [CmdletBinding(DefaultParameterSetName='ABC')]
    Param(
        [Parameter(Mandatory=$false, ParameterSetName='ABC', Position=1)]
        [switch] $ABC,

        [Parameter(Mandatory=$false, ParameterSetName='DEF', Position=1)]
        [switch] $DEF,

        [switch] $Extra
    )

    My-Function -ABC:$ABC -DEF:$DEF -Extra:$Extra
}
My-Function: набор параметров не может быть разрешен с использованием указанного имени
параметры.
В строке:24 символа:1
+ My-Function -ABC:$ABC -DEF:$DEF -Дополнительно:$Extra
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo: InvalidArgument: (:) [My-Function], ParameterBindingException
    + FullyQualifiedErrorId: AmbiguousParameterSet,My-Function

Как я могу передать параметры -ABC а также -DEF - был ли указан каждый или нет - из функции Entry-Point функционировать My-Function?

1 ответ

Решение

Быстрый ответ - брызги. PowerShell позволяет вам представлять хеш-таблицу в качестве параметров функции (используя @ вместо $) и использует ключи хеш-таблицы в качестве имен параметров, значения являются значениями параметров.

Кроме того, каждая расширенная функция автоматически устанавливает $PSBoundParameters в качестве хеш-таблицы параметров, которые передаются в.

Итак... вы можете просто сказать:My-Function @PSBoundParameters

Другие вопросы по тегам