标记为解决方案的帖子很好,并且对于您有 2 组相互参数的情况相对方便。在这种情况下,您有 2x2=4 个参数集。假设您没有 2 组而是 3 组 2 个参数。这导致 2x2x2=8 个必要的 ParameterSet。这意味着每个参数至少有 8 行 -> 6x8=48 行仅用于声明性部分。更不用说将正确的参数集正确分配给每个参数的浓度。对于像这样的简单语法不存在更好的方法:
(-a|-b) (-c|-d) (-e|-f)...
编辑:这里澄清我想意识到的:
Param(
[string]$a1="some value to create a2",
[PsObject]$a2,
[string]$b1="some value to create a2",
[PsObject]$b2,
[string]$c1="some value to create a2",
[PsObject]$c2,
)
对于我的功能,应该有必要提供(a1 或 a2)和(b1 或 b2)和(c1 或 c2)。因为 a2、b2 和 c3 可以通过 a1、b1 和 c1 的默认值创建,所以所有带有 n2 的参数(其中 n = a 或 b 或 c)都应该是可选的(强制 = false)。因为我有 n1 的默认值(其中 n = a 或 b 或 c),所以它们也不是强制性的。
回到我最初的问题:我可以为参数输入可能性的每个排列构建 ParameterSets。这将导致很多工作,因为我有很多不同的参数。
例子:
Param(
[Parameter(Position=0)]
[Parameter(ParameterSetName="a1b1c1", Mandatory=$false)]
[Parameter(ParameterSetName="a1b1c2", Mandatory=$false)]
[Parameter(ParameterSetName="a1b2c1", Mandatory=$false)]
[Parameter(ParameterSetName="a1b2c2", Mandatory=$false)]
[string]$a1="some value to create a2",
[Parameter(Position=0)]
[Parameter(ParameterSetName="a2b1c1", Mandatory=$false)]
[Parameter(ParameterSetName="a2b1c2", Mandatory=$false)]
[Parameter(ParameterSetName="a2b2c1", Mandatory=$false)]
[Parameter(ParameterSetName="a2b2c2", Mandatory=$false)]
[PsObject]$a2,
[Parameter(Position=1)]
[Parameter(ParameterSetName="a1b1c1", Mandatory=$false)]
[Parameter(ParameterSetName="a1b1c2", Mandatory=$false)]
[Parameter(ParameterSetName="a2b1c1", Mandatory=$false)]
[Parameter(ParameterSetName="a2b1c2", Mandatory=$false)]
[string]$b1="some value to create a2",
[Parameter(Position=1)]
[Parameter(ParameterSetName="a1b2c1", Mandatory=$false)]
[Parameter(ParameterSetName="a1b2c2", Mandatory=$false)]
[Parameter(ParameterSetName="a2b2c1", Mandatory=$false)]
[Parameter(ParameterSetName="a2b2c2", Mandatory=$false)]
[PsObject]$b2,
[Parameter(Position=2)]
[Parameter(ParameterSetName="a1b1c1", Mandatory=$false)]
[Parameter(ParameterSetName="a1b2c1", Mandatory=$false)]
[Parameter(ParameterSetName="a2b1c1", Mandatory=$false)]
[Parameter(ParameterSetName="a2b2c1", Mandatory=$false)]
[string]$c1="some value to create a2",
[Parameter(Position=2)]
[Parameter(ParameterSetName="a1b1c2", Mandatory=$false)]
[Parameter(ParameterSetName="a1b2c2", Mandatory=$false)]
[Parameter(ParameterSetName="a2b1c2", Mandatory=$false)]
[Parameter(ParameterSetName="a2b2c2", Mandatory=$false)]
[PsObject]$c2,
)
与第一篇文章相比,你可以很容易地看到它变得多么复杂和漫长。但是,由于所有 Mandatory=false 参数,它甚至都不起作用。
有什么建议可以实现我的目标吗?