首页 > 解决方案 > 将 ParameterSet 值传递给其他 ParameterSet 会导致 AmbiguousParameterSet 异常

问题描述

我正在尝试使用另一个带有参数集的 PowerShell 函数来调用具有参数集的 PowerShell 函数。在下面的代码中,我想Entry-Point使用-ABCor-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
+ 我的功能 -ABC:$ABC -DEF:$DEF -Extra:$Extra
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [My-Function], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,My-Function

如何将参数-ABC-DEF- 无论是否指定每个参数 - 从函数Entry-Point传递到函数My-Function

标签: powershellparameter-sets

解决方案


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

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

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


推荐阅读