2016-04-15 64 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