PowerShell-Know how: Die Rolle der psbase-Eigenschaft

Jedes PowerShell-Objekt besitzt eine psobject– und eine psbase-Property. Beide sind also immer da, werden aber relativ selten für irgendwelche Abfragen benötigt. Während psobject das Objekt beschreibt, das von PowerShell für jedes Objekt als eine Art „Rahmenobjekt“ angelegt wird (auch „Adapter“ genannt, da hier das klassische Adapter-Entwurfsmuster angewendet wird), erlaubt psbase eine Abfrage der Members des „eingebauten“ Objekts.

Und wann braucht man das?

Zum Beispiel, wenn man die Members der (abstrakten) Array-Klasse erhalten will, auf der PowerShell-Arrays basieren.

$l = 11,22,33<br>$l.psbase | Get-Member -MemberType Property

Das gilt auch für Listen aller Art.

$lg = [System.Collections.Generic.List[Int]::new()<br>$lg.add(11)<br>$lg.psbase | Get-Member

Die Rückgabe ist allerdings kein RuntimeType-Objekt, sondern ein PsObject-Objekt.

psobject und psbase sind elementare Bestandteile des PowerShell-Typssystems, das auf dem .NET-Typsystem aufsetzt und zu mehr Flexibilität führen soll (das Thema dynamisches Typisieren kam durch Programmiersprachen wie Ruby und Python damals gerade erst in Mode). Leider aber auch zu etwas Verwirrung (da nehme ich mich selber nicht aus;). Eine gute Zusammenfassung gibt der „Vater“ der PowerShell, Jeffrey Snover, in einem Blogeintrag aus dem Jahr 2006 (!):

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.