将 ParameterSet 值传递给其他 ParameterSet 会导致 AmbiguousParameterSet 异常

Passing ParameterSet values to other ParameterSet causes AmbiguousParameterSet exception

我正在尝试调用一个具有参数集的 PowerShell 函数,使用另一个具有参数集的 PowerShell 函数。在下面的代码中,我想使用 -ABC-DEF 开关调用 Entry-Point 而不是两者 。但是,当我 运行 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

快速回答是飞溅。 PowerShell 允许您将哈希表作为函数的参数(使用 @ 而不是 $),并使用哈希表的键作为参数名称,值是参数值。

此外,每个高级函数都会自动将 $PSBoundParameters 设置为传入参数的哈希表。

所以...你可以说: My-Function @PSBoundParameters