我有两个功能。第一个有一个参数集,第二个有两个参数集,如下所示:
function OneSet{
[CmdletBinding()]
param ( $NoSet,
[parameter(ParameterSetName = 'A')]$A )
process { $PSCmdlet.ParameterSetName }
}
function TwoSets{
[CmdletBinding()]
param ( $NoSet,
[parameter(ParameterSetName = 'A',Mandatory = $true)]$A,
[parameter(ParameterSetName = 'B',Mandatory = $true)]$B )
process { $PSCmdlet.ParameterSetName }
}
调用不带参数的第一个会导致 '__AllParameterSets' 绑定:
C:\> OneSet
__AllParameterSets
不带参数调用第二个会引发异常:
C:\> TwoSets
TwoSets : Parameter set cannot be resolved using the specified named parameters.
+ TwoSets
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [TwoSets], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,TwoSets
我不明白为什么第二种情况比第一种更模棱两可。为什么 PowerShell 不绑定到TwoSets
使用“ __AllParameterSets
”参数集?
是否有一种(简洁的)方法可以拥有多个参数集并且仍然能够在没有参数的情况下调用函数?
编辑:添加Mandatory
关键字以更准确地代表我的困境。