2017-12-21 5 views
1

Ich habe einige ziemlich komplexe Funktionen, die ich für ein Bibliotheksmodul schreibe, mit vielen verschiedenen Möglichkeiten, wie es aufgerufen werden kann. Es ist jedoch tatsächlich möglich, alle von ihnen voreinzustellen, aber wenn ich versuche, meine Funktion ohne Parameter aufzurufen, schlägt der Aufruf fehl, weil der Parametersatz nicht bestimmt werden kann.Gibt es eine Möglichkeit, einen parameterlosen Powershell-Parametersatz zu definieren?

Ich möchte einen Parametersatz definieren, der keinerlei Parameter enthält, so dass Aufrufe ohne Parameter gelingen. Dies ist jedoch schwierig, da ParameterSetName eine Eigenschaft des Parameter-Attributs ist und nichts zugewiesen werden kann.

Ich experimentierte mit der DefaultParameterSet-Eigenschaft des CmdletBinding-Attributs, das auf dem Parameterblock platziert wird, jedoch schien nichts zu funktionieren. Es scheint, dass der dort definierte Name des Parametersatzes vorhanden sein muss, damit Powershell als Standardname verwendet werden kann.

Derzeit ist meine beste Annäherung dieses Anwendungsfalles, einen der Parametersätze zu definieren, um keine obligatorischen Parameter zu haben, jedoch scheitern diese, wenn leere Strings oder Nullen eingefügt werden, und ich möchte, dass dies nicht der Fall ist.

Ist das möglich?

Antwort

3

Sicher ist. Geben Sie einfach einen Standardparametersatz Name, der nicht anderweitig verwendet wird:

function Foo { 
    [CmdletBinding(DefaultParameterSetName='x')] 
    Param(
     [Parameter(Mandatory=$true, ParameterSetName='y')]$a, 
     [Parameter(Mandatory=$false, ParameterSetName='y')]$b, 
     [Parameter(Mandatory=$true, ParameterSetName='z')]$c, 
     [Parameter(Mandatory=$false)]$d 
    ) 

    "`$a: $a" 
    "`$b: $b" 
    "`$c: $c" 
    "`$d: $d" 
} 
+0

Um dies zu überprüfen, habe ich auch hinzugefügt '„ParameterSetName: $ ($ PSCmdlet.ParameterSetName)“', um zu überprüfen, und es funktioniert, wie Sie vorgeschlagen. Wie auch immer, nach meiner Beschreibung scheitert auch das Piping von $ null an dieser Funktion, aber als ich zurücktrat, um zu überlegen, was das bedeutet, waren meine Anforderungen nicht sinnvoll: einen Wert an einen Parametersatz ohne Parameter zu übergeben ist ein Widerspruch. Es ist gut zu wissen, dass die Angabe nicht existierender Parametersätze jedoch funktioniert. Vielen Dank! – bwerks

+0

Nicht "nicht existent", sondern "existiert, wird aber nur verwendet, wenn keine anderen Parametersätze übereinstimmen." –

Verwandte Themen