Можно ли использовать несколько наборов для того, чтобы сделать два набора параметров, не связанных друг с другом, но включенных с двумя другими наборами? Например, скажем, у меня было четыре параметра:Множество наборов параметров в PowerShell
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
Скрипт выполняется, но не завершается правильно (если я называю его два $, он пытается сделать что-то с $ одна и причин сценарий для отказа). Если я ввожу возможные параметры, я не вижу двух долларов; но если я напечатаю -t
и ударил [tab], он будет автозаполнен до -two
. Любые идеи, что может быть причиной этого? Можно ли делать то, что я ищу?
Это может помочь, если вы указали командную строку, которая фактически не срабатывала. В более общем плане вы считаете, что иметь только два параметра, которые имеют 2 возможных значения, могут иметь больше смысла. –
Я думаю, что автозаполнение - две красные селедки. Я проверил блоки набора параметров с помощью $ PSCmdlet.ParameterSetName и получил соответствующие параметры для каждого из необходимых тестовых примеров, а ошибки «Параметр не может быть разрешен» для каждого из нежелательных тестовых случаев. Я считаю, что ошибка находится где-то в остальной части скрипта, а не в определенных наборах параметров. –