Die Pflichtparameter eines Cmdlets auflisten – ein weiteres Beispiel für den PipelineVariable-Parameter

Zur Zeit beschäftige ich mit Azure AD, Office 365 und damit auch mit dem neuen AzureAD-Modul, das aktuell (Stand: Ende Juli 2016) noch als Preview vorliegt (das Modul AzureADPreview wird am einfachsten per Install-Module hinzugefügt). Da die Dokumentation noch „etwas“ spärlich ist, ist es hilfreich bei einem Cmdlet seine Pflichtparameter zu finden.

PowerShell-Commands basieren natürlich ebenfalls auf Objekten, ein Get-Command gibt bei einem Cmdlet ein CmdletInfo, bei einer Function entsprechend ein FunctionInfo-Objekt zurück. Beide besitzen eine Parameters- und eine ParameterSets-Eigenschaft. Das trickreiche ist, dass Parameters ein Objekte vom Typ ParameterMetadata, ParameterSets dagegen Objekte vom Typ CommandParameterInfo liefert. Nur bei diesem Objekt gibt es eine IsMandatory-Eigenschaft.

ParameterSets ist eine sperrige Eigenschaft. Es handelt sich um eine generische Collection (sie kann nur Objekte eines bestimmten Typs aufnehmen, in diesem Fall vom Typ CommandParameterSetInfo im Namespace System.Management.Automation) vom Typ ReadOnlyCollection im Namespace System.Collections.ObjectModel. Die vollständige Typenbezeichnung lautet

System.Collections.ObjectModel.ReadOnlyCollection`1[System.Management.Automation.CommandParameterSetInfo]

Ein CommandParameterSetInfo-Objekt besitzt drei Eigenschaften: Name, IsDefault und Parameters.

Auch hinter Parameters steckt ebenfalls eine ReadOnlyCollection. Sie beherbergt Objekte vom Typ CommandParameterInfo. Wie ein

[System.Management.Automation.CommandParameterInfo].GetProperties().Name

verrät, besitzt ein CommandParameterInfo-Objekt folgende Eigenschaften:

Name
ParameterType
IsMandatory
IsDynamic
Position
ValueFromPipeline
ValueFromPipelineByPropertyName
ValueFromRemainingArguments
HelpMessage
Aliases
Attributes

Also muss ein Befehl, der alle Pflichtparameter eines Command zurückgibt, zuerst die ParameterSets- und danach die Parameters-Eigenschaft durchlaufen.

Die folgende Function gibt zu einem Command, dessen Name beim Aufruf übergeben wird, die Namen der Pflichtparameter aus:

Der Aufruf von

listet die drei Pflichtparameter des Cmdlets auf.

Eine Kleinigkeit fehlt noch. Es wäre ganz nett, wenn auch der Name des Parametersets und eine Angabe darüber, ob es das Defaultparameterset ist, ausgegeben werden würde. Das kleine „Problem“ besteht darin, dass das CommandParameterInfo diese Information nicht mehr enthält. Dank es mit der PowerShell 4.0 eingeführten PipelineVariable-Parameters ist das zum Glück kein Problem.

Die folgende Function gibt zu jedem Pflichtparameter auch den Namen des Parametersets aus:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.