将 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
我正在尝试调用一个具有参数集的 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