到目前为止,我或多或少地避免在我的 PowerShell 脚本中使用参数集,因为我发现它们非常冗长且难以实现复杂的依赖项。
StackOverflow 上有几个类似的问题和答案,但我可以找到适合我情况的可接受的解决方案或解决方法。实际的脚本更加复杂,但这是我卡住了:
Function Test-ParamSet {
[CmdletBinding(DefaultParameterSetName='Param1')][OutputType([Object[]])]Param (
[Parameter(ParameterSetName = 'Param1', Mandatory = $True)]
[Parameter(ParameterSetName = 'Param1Switch', Mandatory = $True)]
$Param1,
[Parameter(ParameterSetName = 'Param2', Mandatory = $True)]
[Parameter(ParameterSetName = 'Param2Switch', Mandatory = $True)]
$Param2,
[Parameter(ParameterSetName = 'Param3', Mandatory = $True)]
$Param3,
[Parameter(ParameterSetName = 'Param1Switch')]
[Parameter(ParameterSetName = 'Param2Switch')]
[Switch]$Switch1,
[Parameter(ParameterSetName = 'Param1Switch')]
[Parameter(ParameterSetName = 'Param2Switch')]
[Switch]$Switch2
)
Write-Host $PsCmdlet.ParameterSetName
}
参数规则:
- 至少应提供一个
Param#
(Param1
,Param2
或) 参数Param3
- 只能提供一个
Param#
(Param1
,Param2
或Param3
) 参数 - 开关 (
Switch1
和Switch2
) 是可选的,只能与Param1
orParam2
参数一起提供(一个或两个)
这意味着以下命令应该会产生错误:
Test-ParamSet
Test-ParamSet -Param3 'Test' -Switch1
并且应该接受以下命令:
Test-ParamSet -Param1 'Test'
Test-ParamSet -Param1 'Test' -Switch1
Test-ParamSet -Param2 'Test' -Switch1 -Switch2
问题在于以下命令:
Test-ParamSet -Param2 'Test'
它会产生一个意外错误:
Test-ParamSet : Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided. At line:1 char:1 + Test-ParamSet -Param2 'Test' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Test-ParamSet], ParameterBindingException + FullyQualifiedErrorId : AmbiguousParameterSet,Test-ParamSet
我想这与@mklement0在如何更改参数的抛出消息中提到的这个 github 问题有关?.
但是如何使用参数集充分解决或解决此问题?