此“规则”在PowerShell文档中进行了说明,例如在此处。但是,我不确定我是否正确解释了它。以下似乎对我来说很好。
function Test-ParameterSets
{
param(
[Parameter(Position = 0, ParameterSetName = "NameName")]
[Parameter(Position = 0, ParameterSetName = "NameId")]
[string] $A_by_Name,
[Parameter(Position = 0, ParameterSetName = "IdName")]
[Parameter(Position = 0, ParameterSetName = "IdId")]
[int] $A_by_Id,
[Parameter(Position = 1, ParameterSetName = "NameName")]
[Parameter(Position = 1, ParameterSetName = "IdName")]
[string] $B_by_Name,
[Parameter(Position = 1, ParameterSetName = "NameId")]
[Parameter(Position = 1, ParameterSetName = "IdId")]
[int] $B_by_Id
)
write-host "Hello"
}
我误会了吗?还是规则过时了?
您还没有走好榜样:
function Test-ParameterSets
{
param(
[Parameter(Position = 0, ParameterSetName = "NameName")]
[Parameter(Position = 0, ParameterSetName = "NameId")]
[string] $A_by_Name,
[Parameter(Position = 0, ParameterSetName = "IdName")]
[Parameter(Position = 0, ParameterSetName = "IdId")]
[int] $A_by_Id,
[Parameter(Position = 1, ParameterSetName = "NameName")]
[Parameter(Position = 1, ParameterSetName = "IdName")]
[string] $B_by_Name,
[Parameter(Position = 1, ParameterSetName = "NameId")]
[Parameter(Position = 1, ParameterSetName = "IdId")]
[int] $B_by_Id
)
"ParametetSetName is $($PSCmdlet.ParameterSetName)"
}
输出:
Test-ParameterSets : Parameter set cannot be resolved using the specified named parameters.
At line:25 char:1
+ Test-ParameterSets
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-ParameterSets], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Test-ParameterSets
当您具有不同的行为或使用不同的参数时,通常会使用ParamaterSetName,具体取决于函数用户正在使用的参数集。该规则是正确的。您可以使用DefaultParameterSetName
属性的CmdletBinding
属性来帮助PowerShell确定正在使用哪个参数集。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句