PowerShell-Challenge der Woche

Gesucht ist ein Befehl, der alle Common-Parameters eines Commands ausgibt, also z.B. Verbose, ErrorAction, WarningVariable usw.

Ich würde dazu die Metadaten eines Parameter-Objekts abfragen, die per Get-Command, dem Commandnamen und der Parameters-Property geliefertert werden.Die Parameters-Property ist eine „hässliche“ Hashtable, also muss sowohl die Parameters- als auch die Values-Properties expandiert werden.

Der folgende Befehl liefert alle Parameter einzeln:

Get-Command Get-Printjob | Select-Object -ExpandProperty Parameters | Select-Object -ExpandProperty Values

Wie an der Ausgabe zu erkennen ist, kommt bei einigen der Parameter-Objekte in der Attributes-Eigenschaft ein „CommonParameters“ vor. Dahinter steckt die TypeId-Property. DIe Frage ist daher, wie man nur solche Parameter erhält, bei denen das der Fall ist.

Das ist mein Versuch, der nach einer halben Stunde herumprobieren, herauskam (am Beispiel des Get-PrintJob-Commands):

Get-Command get-printjob | Select-Object -ExpandProperty Parameters | Select-Object -ExpandProperty Values | Where-Object { ($_.Attributes.TypeId.Where{$_ -match "Common"}).Count -eq 0 }

Es gibt sicher kürzere und elegantere Wege die Namen der Common-Parameters zu erhalten, zumal nicht alle Common Parameters einen System.Management.Automation.Internal.CommonParameters-Typ besitzen. Warum auch immer;)

Die Challenge ist damit nicht gelöst und lautet: Wie erhalte ich die Namen der Common Parameters eines Commands aus den Metadaten des Commands?

Natürlich sind die Common Parameters immer gleich und lassen sich allgemein über die Properties der Klasse System.Management.Automation.Internal.CommonParameters abfragen. Aber die Challange soll, sofern überhaupt möglich, über die Metadaten eines Commands gelöst werden.

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.