![]() |
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.
Die Verwendung einer statischen Eigenschaft oder Methode einer .NET-Klasse gestaltet sich besonders einfach. Der grundsätzliche Aufruf sieht dabei wie folgt aus:
[<Klassenname>]::Eigenschaft
und
[<Klassenname>]::Methode(<Parameter>)
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)
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.searchnetworking.de/img/logo_vogel.gif“, „c:\logo_vogel.gif“)
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.
Microsoft Deutschland GmbH
Firmenprofil
Kontakt
posted am 01.09.2010 um 11:10 von Joachim Bernert
posted am 31.08.2010 um 11:03 von nicht registrierter User
posted am 30.08.2010 um 22:15 von nicht registrierter User
posted am 30.08.2010 um 17:01 von nicht registrierter User
posted am 26.08.2010 um 11:40 von Leserbrief SNET
posted am 07.09.2009 um 19:52 von Unregistriert
posted am 26.08.2009 um 09:34 von Unregistriert
Mitdiskutieren