PowerShell als dynamische Sprache

Wer die PowerShell „nur“ als Anwender kennt, wird sich bei dem folgenden Befehl vermutlich nicht viel denken:

$Neu = new-object PsObject

Ok, es wird ein neues Objekt angelegt, wobei PsObject wohl irgendetwas bedeuten wird. Tatsächlich steht PsObject für ein „generisches“ PowerShell-Objekt, das noch keine Members besitzt.

Auch der nächste Befehl klingt alles andere als spektakulär:

Add-Member -InputObject $Neu -MemberType ScriptMethod -Name TuWas -Value { get-process | where-object { $_.HandleCount -gt 1000 } }

Das neu angelegte Objekt erhält per Add-Member ein neues Member, das für einen Skriptblock steht. Ein Get-Member „beweist“ es:

PS C:\Dokumente und Einstellungen\Pemo08> $Neu | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method System.Boolean Equals(Object obj)
GetHashCode Method System.Int32 GetHashCode()
GetType Method System.Type GetType()
ToString Method System.String ToString()
TuWas ScriptMethod System.Object TuWas();

Der folgende Befehl führt das neue Script-Member aus:

$Neu.TuWas()

Jetzt kommt eine weitere Property hinzu, die für die Prozesse stehen soll, die die Abfrage zurückgibt:

Add-Member -InputObject $Neu -MemberType NoteProperty -Name ProzListe -Value $null

Die neue Property erhält einen Wert:

$Neu.ProzListe = $Neu.TuWas()

und steht damit für die Process-Objekt, die das aufgestellte Kriterium erfüllen.

Das Ganze kann man auch abspeichern:

Export-CliXml -InputObject $Neu -Path NeuObj.xml

Und irgendwann später wieder einlesen:

$Proz = Import-Clixml -Path NeuObj.xml

Das sind die „dynamischen“ Eigenschaften der PowerShell, um die sie mancher Profi-Entwickler, der „nur“ C# oder VB.NET beherrscht, beneiden dürfte.

Advertisements

Kommentar verfassen

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s