Powershell对参数的不同操作

时间:2016-04-15 12:23:38

标签: powershell

我需要为命令行指定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
)

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分:2)

@AgentK很接近,但需要进行一些修正。

首先,Position参数的要求是它是switch parameter而不是字符串。然后在您的代码中,您可以将Parameter视为布尔值(至少在大多数情况下;此处存在一些不相关的细微差别)。

其次,[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 ) 属性的setContentView(R.layout.activity_main);参数在每个参数集上重新开始,为0;您不希望使用位置1处的第一个参数启动参数集。

setContentView