2016-04-15 3 views
1

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

1)

command -fwList 

будет запускать определенную функцию (получить-контента), который будет возвращать список межсетевых экранов, поэтому без необходимости каких-либо параметров, то это должно выполняться

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 
) 
+0

О чем именно они должны зависеть? Можете ли вы просто сделать их обязательными? Вероятно, вы захотите использовать имена ParameterSet для компиляторов параметров. –

+0

-fwName и -fwCommand зависят друг от друга и оба требуются, поэтому они будут использоваться для передачи переменной в приложение, для которого требуется имя брандмауэра и команда для запуска на брандмауэре. -fwList должен быть в состоянии работать один. – user1776732

ответ

2

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

Во-первых, требование для параметра fwList состоит в том, что оно является switch parameter, а не строкой. Затем в вашем коде вы можете обрабатывать $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

ли что-то вроде этого:

[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 
) 
+0

Спасибо, Как мне получить -fwList для запуска чего-то, не требуя переменной? что-то вроде $ fwList = $ allFirewallIps – user1776732

+0

@ user1776732 вы можете поместить значение по умолчанию для параметра функции следующим образом: [Параметр (Обязательный = $ False, ParameterSetName = 'MyParamSetName1')] [string] $ fwList = 'default_value' –

+0

, а затем что следует ли использовать значение default_value и как его называть? Я также пробовал разные варианты с $ null – user1776732

Смежные вопросы