2017-02-01 56 views
1

我有以下參數定義。在此腳本中,我必須擁有用戶的訪問ID,訪問密鑰和帳戶名稱。我還必須有設備ID,設備名稱或顯示名稱。最後,我需要包含一個或多個屬性名稱和相關的值。要求一個參數與一個開關,兩個與另一個參數

腳本使用這些信息的屬性名和值添加到設備(在我們的監控系統)。現在,我需要添加對刪除設備的支持,但我無法弄清楚如何更改參數定義。

我想用[轉],以確定用戶想要添加或刪除的屬性。如果用戶在運行腳本時包含-Add開關,那麼我將需要$ PropertyNames和$ PropertyValues。如果它們包含-Delete,那麼我只需要$ PropertyName。

什麼是實現這一目標的最佳方式是什麼?最好是有一個名爲「Operation」的參數,它將採用「Add」或「Delete」,然後將PropertyName/Values要求設置爲$ Operation的值?

謝謝。代碼段低於:

[CmdletBinding(DefaultParameterSetName=’Default’)] 
    Param (
     [Parameter(Mandatory=$True, ParameterSetName=’Default’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)] 
     [string]$AccessId, 
     [Parameter(Mandatory=$True, ParameterSetName=’Default’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)] 
     [string]$AccessKey, 
     [Parameter(Mandatory=$True, ParameterSetName=’Default’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)] 
     [string]$AccountName, 
     [Parameter(Mandatory=$True,ParameterSetName=’Default’)] 
     [int]$DeviceId, 
     [Parameter(Mandatory=$True,ParameterSetName=’NameFilter’)] 
     [string]$DeviceDisplayName, 
     [Parameter(Mandatory=$True,ParameterSetName=’IPFilter’)] 
     [string]$DeviceName, 
     [Parameter(Mandatory=$True, ParameterSetName=’Default’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)] 
     [string[]]$PropertyNames, 
     [Parameter(Mandatory=$True, ParameterSetName=’Default’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’NameFilter’)] 
     [Parameter(Mandatory=$True, ParameterSetName=’IPFilter’)] 
     [string[]]$PropertyValues, 
     [switch]$WriteLog, 
     [string]$LogPath 
    ) 

回答

2

如果參數適用於所有參數設置你不需要,除非他們需要在不同的組獨特的屬性添加一個單獨的屬性[Parameter()]爲每一個。

的開關可用於你想要的方式,就是你需要排序複用它與所有其他組的。所以,如果每次都現在就可以在任何一個-Add-Remove場景中使用的3套,那麼你將現在要6個不同的參數集。

function Invoke-Thing { 
[CmdletBinding(DefaultParameterSetName='DefaultAdd')] 
    Param (
     [Parameter(Mandatory=$True)] 
     [string]$AccessId, 

     [Parameter(Mandatory=$True)] 
     [string]$AccessKey, 

     [Parameter(Mandatory=$True)] 
     [string]$AccountName, 

     [Parameter(Mandatory=$True,ParameterSetName='DefaultAdd')] 
     [Parameter(Mandatory=$True,ParameterSetName='DefaultRemove')] 
     [int]$DeviceId, 

     [Parameter(Mandatory=$True,ParameterSetName='NameFilterAdd')] 
     [Parameter(Mandatory=$True,ParameterSetName='NameFilterRemove')] 
     [string]$DeviceDisplayName, 

     [Parameter(Mandatory=$True,ParameterSetName='IPFilterAdd')] 
     [Parameter(Mandatory=$True,ParameterSetName='IPFilterRemove')] 
     [string]$DeviceName, 

     [Parameter(Mandatory=$True)] 
     [string[]]$PropertyNames, 

     [Parameter(Mandatory=$True, ParameterSetName='DefaultAdd')] 
     [Parameter(Mandatory=$True, ParameterSetName='NameFilterAdd')] 
     [Parameter(Mandatory=$True, ParameterSetName='IPFilterAdd')] 
     [string[]]$PropertyValues, 

     [switch]$WriteLog, 
     [string]$LogPath , 

     [Parameter(Mandatory=$True, ParameterSetName='DefaultAdd')] 
     [Parameter(Mandatory=$True, ParameterSetName='NameFilterAdd')] 
     [Parameter(Mandatory=$True, ParameterSetName='IPFilterAdd')] 
     [switch]$Add , 

     [Parameter(Mandatory=$True, ParameterSetName='DefaultRemove')] 
     [Parameter(Mandatory=$True, ParameterSetName='NameFilterRemove')] 
     [Parameter(Mandatory=$True, ParameterSetName='IPFilterRemove')] 
     [switch]$Remove 
    ) 

} 

而這裏的展示套Get-Help輸出:

NAME 
    Invoke-Thing 

SYNTAX 
    Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceId <int> -PropertyNames <string[]> -PropertyValues <string[]> -Add [-WriteLog] [-LogPath <string>] [<CommonParameters>] 

    Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceId <int> -PropertyNames <string[]> -Remove [-WriteLog] [-LogPath <string>] [<CommonParameters>] 

    Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceDisplayName <string> -PropertyNames <string[]> -Remove [-WriteLog] [-LogPath <string>] [<CommonParameters>] 

    Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceDisplayName <string> -PropertyNames <string[]> -PropertyValues <string[]> -Add [-WriteLog] [-LogPath <string>] [<CommonParameters>] 

    Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceName <string> -PropertyNames <string[]> -Remove [-WriteLog] [-LogPath <string>] [<CommonParameters>] 

    Invoke-Thing -AccessId <string> -AccessKey <string> -AccountName <string> -DeviceName <string> -PropertyNames <string[]> -PropertyValues <string[]> -Add [-WriteLog] [-LogPath <string>] [<CommonParameters>] 


ALIASES 
    None 


REMARKS 
    None 
相關問題