2016-04-15 66 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视为布尔值(至少大部分时间;这里有一些细微差别)。

其次,Parameter属性的Position参数与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你可以将默认值放在函数参数中,例如:[Parameter(Mandatory = $ False,ParameterSetName ='MyParamSetName1')] [string] $ fwList ='default_value' –

+0

然后我应该使用作为default_value,我该如何调用它?我也用$ null尝试了不同的选项 – user1776732