powershell - PowerShell中的多个参数集

标签 powershell parameters set powershell-2.0 powershell-3.0

是否可以使用多组参数使两组参数互斥,而使另外两组参数互斥呢?例如,假设我有四个参数:

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/

相关文章:

powershell - 什么是 ShellId?为什么我需要它?

xml - 使用参数值,如 xslt 中的 select

python - 对大型 Python 集的操作

c++ - 创建给定变量集的所有可能排列

java - Java 的 LinkedHashMap 是否维护键的顺序?

powershell - 使用-notcontains在数组内的字符串中查找子字符串

powershell - 为什么 Get-PSDrive 这么慢?

Powershell:查找/替换 ASCII 控制字符模式

javascript - 将对象传递给函数

java - 如何知道作为扩展抽象类的参数传递的类