是否可以使用多个集合使两组参数互相排斥,但包含其他两组参数?例如,假设我有四个参数:
param(
$param1,
$param2,
$param3,
$param4,
)
Param1和2彼此独占,但可以调用3或4。类似地,param3和4彼此排斥,但是可以调用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
脚本执行,但它没有正确完成(如果我用$ 2调用它,它会尝试用$ 1做一些事情并导致脚本失败)。如果我查看可能的参数,我就不会看到$ 2;但如果我输入-t
并点击[标签],它会自动填充到-two
。可能导致这种情况的任何想法?是否有可能做我正在寻找的事情?
答案 0 :(得分:3)
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请求中。