2017-04-27 4 views
2

Zwei Parameter $ installDatabase und database $:Parametersätze nicht zwingend

[Parameter(ParameterSetName='Test', mandatory=$false)][Switch]$installDatabase, 
[Parameter(ParameterSetName='Test')][String]$databasePassword 

Ich brauche dies die gleiche Funktionalität wie dies, wenn auszuführen:

if ($installDatabase -and !($databasePassword) -or ($databasePassword -and !($installDatabase))) 
{ 
Write-Verbose "Use -installDatabase and -databasePassword together." 
} 

Was mit dem ParameterSet falsch ist?

Antwort

1

Edit: OK hier ist eine Version, wo der Parametersatz

function test 
{ 
    [CmdletBinding(DefaultParameterSetName="Test")] 
    param(
     [Parameter(ParameterSetName='Test', mandatory=$true)] 
     [switch]$installDatabase, 
     [Parameter(ParameterSetName='Test2', mandatory=$true)] 
     [String]$databasePassword 
    ) 
} 

In dieser Version ausgewertet wird entweder Sie rufen test -installDatabase oder test -databasePassword pwd oder die folgende Ausnahme auftritt:

test : Parameter set cannot be resolved using the specified named parameters. 
+0

Das Problem ist, dass die if-Anweisung außerhalb des Parameterblocks liegt. Ich brauche eine Lösung, bei der eine Ausnahme ausgelöst wird, wenn die Parameter nicht zusammen übergeben werden. Parametersätze bieten dies möglicherweise nicht. – Jelphy

+0

OK, es war nicht klar aus der Frage, hier ist ein Update –

1
function Do-Something{  
    Param(
     [Parameter(ParameterSetName='Test', Mandatory=$true)] 
     [Switch]$installDatabase, 

     [Parameter(ParameterSetName='Test', Mandatory=$true)] 
     [String]$databasePassword 
    ) 
} 

] fehlte vor [String]

+0

Apologies - das wurde ein Tippfehler. Die Funktionalität funktioniert immer noch nicht. – Jelphy

+0

Ich brauche das ParameterSet, um die gleiche Bedingung wie die if-Anweisung zu bewerten. Ist das möglich? Daher wird eine Ausnahme ausgelöst, wenn die beiden Parameter nicht zusammen verwendet werden. – Jelphy

1

(auf PS v5 getestet)

es, dass Parameter erscheint Sätze funktionieren nur, wenn mindestens zwei definiert sind - jedoch eher als eine Ausnahme Anhebung der Benutzer Sie werden aufgefordert, die fehlenden Werte anzugeben (wegen Mandatory=$True), die möglicherweise nicht Ihren Wünschen entsprechen.

Wenn die Param Definition geändert wird:

Param(
[Parameter(ParameterSetName='Test1', Mandatory=$True)] 
[Switch]$installDatabase, 

[Parameter(ParameterSetName='Test1', Mandatory=$True)] 
[String]$databasePassword, 

[Parameter(ParameterSetName='Test2')] 
[String]$something 
) 

Der Benutzer wird installDatabase oder databasePassword gefragt werden, ob nur einer von ihnen geliefert wird, und nicht gefragt werden, ob something geliefert wird.

Eine Ausnahme wird ausgelöst, wenn something und (installDatabase oder databasePassword) geliefert werden.

Wenn nur ein Parametersatz definiert ist, ist es so, als ob keiner ist.

EDIT

Der Versuch, einen Standardwert von ($throw...) für die optionalen Parameter zu verwenden, wie zB:

[Parameter(ParameterSetName='Test1')] 
[Switch]$installDatabase=$(throw "installDatabase is mandatory if databasePassword is provided"), 

funktioniert nicht, da der Standardwert, ob der Parametersatz verwendet wird, anwendbar.

Verwandte Themen