2017-02-01 3 views
1

I die folgende Parameterdefinition haben. In diesem Skript muss ich die Zugriffs-ID, den Zugriffsschlüssel und den Kontonamen des Benutzers haben. Ich muss auch entweder eine Geräte-ID, einen Gerätenamen oder einen Anzeigenamen haben. Schließlich benötige ich die Aufnahme von einem oder mehreren Eigenschaftsnamen und den zugehörigen Wert (en).benötigen einen Parameter, der mit einem Schalter und zwei mit einem anderen

Das Skript verwendet diese Informationen, um die Eigenschaftsnamen und Wert auf das Gerät (in unserem Überwachungssystem) hinzuzufügen. Jetzt muss ich Unterstützung für das Löschen von Geräten hinzufügen, aber ich kann nicht herausfinden, wie ich die Parameterdefinition ändern würde.

Ich dachte an einen [Schalter], um festzustellen, ob der Benutzer eine Eigenschaft hinzufügen oder löschen möchte. Wenn der Benutzer den Schalter -Add beim Ausführen des Skripts eingefügt hat, benötige ich sowohl $ PropertyNames als auch $ PropertyValues. Wenn sie -Delete enthalten, benötige ich nur $ PropertyName.

Was wäre der beste Weg, dies zu erreichen? Wäre es besser, einen Parameter namens „Operation“, die „Hinzufügen“ oder „Löschen“ statt und stützen Sie die Property/Wert Anforderung auf dem Wert von $ Betrieb?

Danke. Der Code-Snippet ist unten:

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

Antwort

2

Wenn ein Parameter vorhanden ist in allen Parametersätze Sie keine separates [Parameter()] Attribut für jeden hinzufügen müssen, wenn sie in verschiedenen Sätzen einzigartige Eigenschaften erfordern.

Die Schalter der Art und Weise verwendet werden, können Sie das Ding will, ist Sie müssen es von Multiplex sortieren mit all den anderen Sätzen. Also, wenn jeder der drei Sätze haben Sie nun entweder in einem -Add oder -Remove Szenario verwendet werden könnten, dann werden Sie jetzt bis zu 6 verschiedene Parametersätze gehen.

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 
    ) 

} 

Und hier ist der Get-Help Ausgang der Sätze zeigt:

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 
Verwandte Themen