Frage

Ich habe mit den dynamischen Fähigkeiten von Powershell herum spielen und ich habe mich gefragt, etwas

Ist es etwas gibt, in Powershell analog zu Rubys method_missing (), wo man eine ‚catch aller Methode‘ dynamisch Griff Anrufe nicht existierende Methoden auf Ihren Objekten einstellen kann?

War es hilfreich?

Lösung

Nein, nicht wirklich. Ich vermute, dass die nächste Version von Powershell mehr mit den dynamischen Dispatch-Funktionen in Linie wird hinzugefügt, um .NET 4, aber für den Augenblick, würde dies in reinem Powershell nicht möglich sein.

Obwohl ich erinnere mich, dass es ein Komponentenmodell ist ähnlich den in .NET des TypeDescriptor gefunden für Objekte erstellen, die Eigenschaften und Methoden dynamisch Powershell zur Verfügung stellen. Dies ist, wie XML-Elemente sind in der Lage, wie Objekte behandelt wird, zum Beispiel. Aber das ist schlecht dokumentiert überhaupt, ob und in meiner Erfahrung, viele der Arten / Methoden benötigt werden als interne Integration markiert.

Andere Tipps

Sie können es emulieren, aber es ist schwierig. Die Technik wird in Lee Holmes Buch beschrieben und wird auf zwei Skripte eingekocht - Add-RelativePathCapture http://poshcode.org/2131 und New-CommandWrapper http://poshcode.org/2197 .

Das Wesentliche ist - Sie Cmdlets über New-CommandWrapper außer Kraft setzen können. So können Sie Out-Default neu zu definieren, die implizit am Ende fast jeden Befehls (ohne Befehle mit expliziten Formatierer wie Format-Table am Ende) aufgerufen wird. In der neuen Out-Default Sie überprüfen, ob der letzte Befehl hat eine Ausnahme zu sagen, dass keine Methode / Eigenschaft gefunden wurde. Und da Sie Ihre method_missing Logik eingefügt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top