PowerShell:每个参数集必须至少有一个对于该参数集唯一的参数
例如,PowerShell文档中说明了此“规则”。 然而,我不确定我是否正确地解释了它。以下内容对我来说似乎很好PowerShell:每个参数集必须至少有一个对于该参数集唯一的参数,powershell,parameters,Powershell,Parameters,例如,PowerShell文档中说明了此“规则”。 然而,我不确定我是否正确地解释了它。以下内容对我来说似乎很好 function Test-ParameterSets { param( [Parameter(Position = 0, ParameterSetName = "NameName")] [Parameter(Position = 0, ParameterSetName = "NameId")] [string] $A_by_Name,
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,具体取决于函数用户使用的参数集。规则是正确的。通过使用
CmdletBinding
属性的DefaultParameterSetName
属性,可以帮助PowerShell确定正在使用的参数集。仅当您在不指定两个参数的情况下调用它时。如果调用测试参数sets a b
它将输出名称
。如果调用测试参数集0 1
它将输出IdId
。是的,但PowerShell可以解决这个问题。两个字符串只能是NameName和int,int只能是IdId。没有歧义。PowerShell还使用可能导致混淆的解析参数类型。当所有类型都相同时,参数集中需要一个“唯一”参数。在这种情况下,PowerShell没有其他方法可以用来确定选择了哪个参数集。