Tipp: Zu welchem Namespace gehört ein Parametertyp?

Sobald man sich mit der PowerShell ein wenig besser auskennt (das kann unter Umständen ein paar Jahre dauern;) achtet man mehr auf die Feinheiten. Dazu gehört z.B. die Frage auf welchem (Daten-) Typ bestimmte Parameter basieren. Nehmen wir als Beispiel den Parameter ExecutionPolicy von Set-ExecutionPolicy. Ist sein Wert ein String oder eine Zahl? Weder noch, die Syntaxbeschreibung verrät, dass der Datentyp, große Überraschung, ExecutionPolicy ist. Da für den Parameter lediglich bestimmte Werte in Frage kommen, steht der Datentyp für eine Konstantenliste, eine Enum. Die Konstantenliste umfasst eine Reihe von Zahlenwerten, die durch Namen repräsentiert werden.

Es ist typisch für die PowerShell, dass eine automatische Typenkonvertierung durchgeführt wird. Übergebe ich für den Parameter z.B. „Unrestricted“, also einen String, wird dadurch automatisch die gleichnamige Konstante ausgewählt.

Was sicher nicht jeder weiß, es ist grundsätzlich sehr einfach die geladenen Assemblies nach einem bestimmten Typ zu durchsuchen, um sich z.B. den Namespace ausgeben zu lassen. Kennt man den Namespace, erfährt man alles über den Typ des Enum und kann sich z.B. alle Felder ausgeben lassen.

Der folgende Befehl führt eine Suche unter allen geladenen Typen durch.

Es stellt sich heraus, dass die vollständige Typenbezeichnung Microsoft.PowerShell.ExecutionPolicy ist.

Ein [Microsoft.PowerShell.ExecutionPolicy].GetFields().Name gibt z.B. die Namen der einzelnen Konstanten aus.

Da wir gerade dabei sind, wie erhalte ich den Zahlenwert einer Konstanten wie z.B. RemoteSigned? Ganz einfach per Typenkonvertierung z.B. in einen Int.

Also, keine „Angst“ vor speziellen PowerShell-Typen, sie lassen sich wie gezeigt sehr einfach in den geladenen Assemblies lokalisieren.

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.