Есть ли способ заставить PowerShell применять взаимоисключающие параметры, если существует более одной группы (взаимоисключающих параметров)?
Например, рассмотрим эти параметры в скрипте Test.ps1
(все являются необязательными и непозиционными):
Param(
# GROUP A (a1 and a2 are mutually exclusive)
[switch]$a1,
[switch]$a2,
# GROUP B (b1 and b2 are mutually exclusive)
[switch]$b1,
[switch]$b2
)
Есть ли способ обеспечить, чтобы был указан не более одного параметра из группы A (т. Е. $a1
или $a2
) и / или не более одного параметра из группы B (т. Е. $b1
или $b2
)?
Следующие вызовы будут действительными :
.\Test.ps1
.\Test.ps1 -a1
.\Test.ps1 -a2
.\Test.ps1 -b1
.\Test.ps1 -b2
.\Test.ps1 -a1 -b1
.\Test.ps1 -a1 -b2
.\Test.ps1 -a2 -b1
.\Test.ps1 -a2 -b2
Следующие вызовы будут недействительными :
.\Test.ps1 -a1 -a2 -b1 -b2
.\Test.ps1 -a1 -b1 -b2
.\Test.ps1 -a2 -b1 -b2
.\Test.ps1 -a1 -a2 -b1
.\Test.ps1 -a1 -a2 -b2
Я знаю, как использовать ParameterSetName
для принудительного применения одной группы взаимоисключающих параметров, но я не могу понять, как применять несколько групп. Даже не уверен, возможно ли это вообще. Обратите внимание, что реальный пример является более сложным, чем образец выше (каждая группа имеет более одного параметра, и они не все переключатели).
ОБНОВЛЕНИЕ: из рекомендации в комментарии я добавил наборы параметров:
Param(
# GROUP A (a1 and a2 are mutually exclusive)
[Parameter(ParameterSetName="a1")]
[Parameter(ParameterSetName="b1")]
[Parameter(ParameterSetName="b2")]
[switch]$a1,
[Parameter(ParameterSetName="a2")]
[Parameter(ParameterSetName="b1")]
[Parameter(ParameterSetName="b2")]
[switch]$a2,
# GROUP B (b1 and b2 are mutually exclusive)
[Parameter(ParameterSetName="a1")]
[Parameter(ParameterSetName="a2")]
[Parameter(ParameterSetName="b1")]
[switch]$b1,
[Parameter(ParameterSetName="a1")]
[Parameter(ParameterSetName="a2")]
[Parameter(ParameterSetName="b2")]
[switch]$b2
)
Это не похоже на то, что мне нужно:
PS D:\Scripts> Get-Help .\Test.ps1
Test.ps1 [-a1] [-a2] [-b2] [<CommonParameters>]
Test.ps1 [-a1] [-a2] [-b1] [<CommonParameters>]
Test.ps1 [-a1] [-b1] [-b2] [<CommonParameters>]
Test.ps1 [-a2] [-b1] [-b2] [<CommonParameters>]