Передача значений ParameterSet другому ParameterSet вызывает исключение AmbiguousParameterSet - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь вызвать функцию 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 : Parameter set cannot be resolved using the specified named
parameters.
At line:24 char:1
+ My-Function -ABC:$ABC -DEF:$DEF -Extra:$Extra
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [My-Function], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,My-Function

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

1 Ответ

1 голос
/ 04 июня 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...