是否可以使用多组参数使两组参数互斥,而使另外两组参数互斥呢?例如,假设我有四个参数:
param(
$param1,
$param2,
$param3,
$param4,
)
参数1和2互斥,但可以调用3或4来调用。同样,param3和param3互斥,但是可以调用1还是2来调用。这些是可以一起调用的参数集:
./MyScript.ps1 -param1 -param3
./MyScript.ps1 -param1 -param4
./MyScript.ps1 -param2 -param3
./MyScript.ps1 -param2 -param4
这些不应同时调用:
./MyScript.ps1 -param1 -param2
./MyScript.ps1 -param1 -param3 -param4
./MyScript.ps1 -param2 -param3 -param4
./MyScript.ps1 -param3 -param1 -param2
./MyScript.ps1 -param4 -param1 -param2
./MyScript.ps1 -param3 -param4
我已经尝试了一些方法,但是所有这些方法似乎都导致奇怪的输出,并且仍然允许我调用我认为是“非法”的参数集。这是我设置参数集的示例:
[Parameter(ParameterSetName="onethree",Mandatory=$true,HelpMessage="a or b")]
[Parameter(ParameterSetName="onefour",Mandatory=$true,HelpMessage="a or b")]
[ValidateSet("a","b")]
[string]$one,
[Parameter(ParameterSetName="twothree",Mandatory=$true)]
[Parameter(ParameterSetName="twofour",Mandatory=$true)]
[switch]$two,
[Parameter(ParameterSetName="onethree")]
[Parameter(ParameterSetName="twothree")]
[string[]]$PropertyClass,
[Parameter(ParameterSetName="onefour")]
[Parameter(ParameterSetName="twofour")]
[string[]]$PropertyName
该脚本已执行,但未正确完成(如果我用$ two调用它,它将尝试用$ one做某事,并导致脚本失败)。如果我浏览可能的参数,我看不到$ two。但是,如果我键入
-t
并点击[tab],它将自动完成为-two
。任何想法可能是什么原因造成的?有可能做我想要的吗?
最佳答案
使用Get-Help
查看参数集是什么的最好方法是使用Get-Help My-Function
。我使用给定的Test-Sets
块创建了一个名为param()
的函数,这是Get-Help
的输出:
SYNTAX
Test-Sets -one <string> {a | b} [-PropertyName <string[]>] [<CommonParameters>]
Test-Sets -one <string> {a | b} [-PropertyClass <string[]>] [<CommonParameters>]
Test-Sets -two [-PropertyName <string[]>] [<CommonParameters>]
Test-Sets -two [-PropertyClass <string[]>] [<CommonParameters>]
除非您始终需要2个参数,否则这似乎满足您的要求,在这种情况下,我认为您唯一需要做的就是在其2个参数集中分别使
$PropertyClass
和$PropertyName
为必需。如果我在这里缺少任何内容,请按照@mike z的要求进行澄清并包含失败的命令。
关于powershell - PowerShell中的多个参数集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27452741/