Mobile-Menu

System-Administration mit Microsofts PowerShell Teil 6 .NET-Klassen mit der PowerShell verwenden

Autor / Redakteur: Markus Widl / Dipl.-Ing. (FH) Andreas Donner

Im sechsten Teil der PowerShell-Artikelserie zeigt IP-Insider, wie von der PowerShell aus direkt auf die Klassen des .NET-Frameworks zugegriffen werden kann. Der Einsatz einer .NET-Programmiersprache ist dabei nicht erforderlich.

Anbieter zum Thema

Die PowerShell selbst wurde auf Grundlage des .NET-Frameworks 2.0 entwickelt. Darüber hinaus basieren alle Objekte innerhalb der PowerShell auf dem .NET-Objektmodell und auch die Verwendung der Klassen aus dem .NET-Framework kann mit Basisfunktionen, also ohne Zuhilfenahme weiterer Tools, erfolgen.

PowerShell-Anwendern steht damit eine gewaltige Funktionsbibliothek zur Verfügung, mit der viele Anwendungsfälle abgedeckt werden können. Allerdings sind dabei fundierte Kenntnisse des .NET-Frameworks unbedingt erforderlich. Dieser Artikel zeigt den grundlegenden Zugriff.

Statische Eigenschaften und Methoden verwenden

Die Verwendung einer statischen Eigenschaft oder Methode einer .NET-Klasse gestaltet sich besonders einfach. Der grundsätzliche Aufruf sieht dabei wie folgt aus:

[]::Eigenschaft

und

[]::Methode()

Statische Eigenschaften und Methoden können damit direkt aufgerufen werden. Ein Instanziieren der Klasse, also das Erstellen eines Objekts, ist dabei nicht erforderlich.

Als erstes Beispiel dienen aus der Klasse Math die statische Eigenschaft Pi, zur Ermittlung des gleichnamigen Werts, und die statische Methode Sin, um eine Sinus-Berechnung durchzuführen. Mit folgendem Aufruf wird der Wert von Pi bzw. der Sinus von x zurückgegeben:

[Math]::Pi[Math]::Sin(x)

Klassen instanziieren

Muss zuerst ein Objekt einer Klasse erstellt werden, ist der Aufruf der Eigenschaften und Methoden etwas aufwändiger. Betrachten wir als Beispiel die Klasse Net.WebClient. Diese enthält die Methode DownloadFile, mit der eine Datei aus dem Internet geladen und lokal gespeichert werden kann. Zunächst wird ein Objekt von Net.WebClient erstellt. Dazu wird das Cmdlet new-object aufgerufen und dabei dem Parameter typename der Klassenname übergeben. New-object liefert daraufhin das gewünschte Objekt, das in einer Variablen zur weiteren Verwendung gespeichert werden sollte. Der Aufruf sieht damit wie folgt aus:

$web = new-object -typename Net.WebClient

Im nächsten Schritt kann nun über die Variable $web die gewünschte Methode aufgerufen werden. Beispiel:

$web.DownloadFile(„http://www.IP-Insider.de/img/logo_vogel.gif“, „c:\logo_vogel.gif“)

Eingabe-Formulare erstellen

Das .NET-Framework enthält eine Vielzahl an Klassen, die zur Darstellung von Fenstern, wie Eingabeformularen, gedacht sind. Noch zu Zeiten des Windows Script Hosts (WSH) mit seinen Scriptsprachen war es nur schwer möglich, leistungsfähige Eingabeformulare zu erstellen. Manche Entwickler haben dazu HTA-Dateien geschrieben. Dabei handelt es sich im Wesentlichen um Browser-Anwendungen. Die Formulare werden dabei mit Web-Scripting erstellt und verwaltet.

Auch mit der PowerShell ist der Aufbau eines Fensters nicht einfach, über das .NET-Framework ist es aber möglich. Hier ein Beispiel für ein einfaches Fenster mit nur einer Schaltfläche:

[void][reflection.assembly]::LoadWithPartialName(„System.Windows.Forms“)$form = new-object Windows.Forms.Form$form.Text = „Beispielfenster“$button = new-object Windows.Forms.Button$button.Text = „OK“$button.Left = 100$button.Top = 100$button.Width = 50$button.Height = 25$button.Add_Click({$form.close()})$form.Controls.Add($button)$form.ShowDialog()

Das Beispiel soll lediglich zeigen, wie aufwändig es ist, auf diesem Weg ein Formular zu erzeugen.

Das Problem dabei ist die aufwändige Gestaltung des Formulars. Visual Studio-Entwickler machen dies per Drag-and-Drop mit dem so genannten Formular-Designer. Dieser erstellt im Hintergrund den nötigen .NET-Code. Leider unterstützt dieses Tool aber nicht die PowerShell und deshalb muss hier die Oberfläche sehr arbeitsintensiv zusammengestellt werden.

Die Dokumentation sämtlicher .NET-Klassen finden Sie unter der unten angegebenen Adresse. Leider ist diese Hilfe nicht für die PowerShell gedacht und so finden sich dort ausschließlich Beispiele für „richtige“ .NET-Programmiersprachen wie C# und Visual Basic.NET. Eine hilfreiche Orientierung ist die Dokumentation aber dennoch.

Im nächsten Teil der PowerShell-Artikelserie wird der Zugriff auf Systeminformationen über die WMI-Cmdlets der PowerShell erläutert.

Artikelfiles und Artikellinks

(ID:2003377)