У меня есть требование указать 3 параметра в командной строке, которые делают разные вещи

1)

command -fwList

Запустит определенную функцию (get-content), которая вернет список брандмауэров, поэтому без каких-либо параметров ее следует запустить

2 )

Тогда эти параметры являются обязательными и требуются вместе

command -fwName <firewallName> -fwCommand <command>

Вот что у меня есть, но как сделать их зависимыми друг от друга?

[CmdletBinding()]
Param(
[Parameter(Mandatory=$False)]
[string]$fwList,
[Parameter(Mandatory=$True,Position=1)]
[string]$fwName,
[Parameter(Mandatory=$True,Position=2)]
[string]$fwCommand
)
1
Paul Dawson 15 Апр 2016 в 15:23

2 ответа

Лучший ответ

@AgentK был близок, но необходимо внести несколько исправлений.

Во-первых, для параметра fwList требуется, чтобы он был параметр переключения, а не строку. Затем в своем коде вы можете рассматривать $fwList, как если бы это было логическое значение (по крайней мере, большую часть времени; здесь есть некоторые нюансы, не относящиеся к делу).

Во-вторых, аргумент Position атрибута Parameter перезапускается с 0 для каждого набора параметров; вы не хотите начинать набор параметров с первого параметра в позиции 1.

[CmdletBinding()]
Param(
   [Parameter(Mandatory=$False, ParameterSetName='ListFirewalls', Position=0)]
   [switch]$fwList,

   [Parameter(Mandatory=$True, ParameterSetName='ProcessFirewalls', Position=0)]
   [string]$fwName,

   [Parameter(Mandatory=$True, ParameterSetName='ProcessFirewalls', Position=1)]
   [string]$fwCommand
)
2
mklement0 15 Апр 2016 в 23:44

Сделайте что-нибудь вроде этого:

[CmdletBinding()]
Param(
[Parameter(Mandatory=$False,ParameterSetName='MyParamSetName1')]
[string]$fwList,
[Parameter(Mandatory=$True,ParameterSetName='MyParamSetName2',Position=1)]
[string]$fwName,
[Parameter(Mandatory=$True,ParameterSetName='MyParamSetName2',Position=2)]
[string]$fwCommand
)
2
Kirill Pashkov 15 Апр 2016 в 12:34