0 Problemstellung

Im Rahmen dieses Referats soll das Konzept des Windows Scripting Hosts erklärt werden. Hierzu ist zunächst einmal eine Begriffsklärung durchzuführen. Dieses und die Vorstellung der Architektur übernimmt das zweite Kapitel. Das dritte Kapitel beschreibt einige grundsätzliche Programmiertechniken, die beim Ausprobieren der im vierten Kapitel vorgestellten Programmbeispiele zu den Objekten, Methoden und Eigenschaften des Windows Scripting Hosts sehr hilfreich sind. Im letzen Kapitel möchte ich noch einige grundsätzliche Dinge zum Thema festhalten und eine mögliche zukünftige Entwicklung vorstellen.

 

1 Einführung

 

Der Windows Scripting Host (WSH) ist eine enorm leistungsfähige Erweiterung für die Betriebssysteme der Microsoft Windows- Familie. Obwohl er bereits seit Windows 98 zum Installationsumfang gehört, findet er in der Öffentlichkeit noch nicht die Bedeutung, die ihm eigentlich gebührt. Ein Hauptgrund hierfür ist die bisher meiner Meinung nach mangelnde Dokumentation von Microsoft, die erst in letzter Zeit [vgl. MS 1] konkrete Formen annimmt.
Das Einsetzen von Scripten oder das Arbeiten mit Objekten, die man, grob gesagt „nicht einfach nur mit der Maus anklicken kann“, zogen bisher viele Benutzer und Entwickler nicht in Betracht, weil es als zu kompliziert bzw. die Leistungsfähigkeit sehr eingeschränkt war.
Das bekannteste Beispiel hierfür sind die altgedienten Batchdateien unter DOS. Sie waren während der DOS- Blütezeit (wer erinnert sich nicht gerne daran, aber...), als objektorientiertes Programmieren noch als „höhere Mathematik“ galt eine enorme Erleichterung, boten jedoch keinerlei Komfort, denn ihre Funktion beschränkte sich hauptsächlich auf das Aneinanderreihen von DOS-Befehlen. Sie waren vom Umfang her meilenweit von einer Programmiersprache entfernt und dennoch benötigte man zur Erstellung derselbigen enormes Hintergrundwissen.

 

 

2 Die Windows- Skript- Architektur

 

Das Überwinden der bereits erwähnten „Einstiegshürde“ soll WSH- Neulingen unter anderem durch die von Microsoft entworfene Architektur zur Integration von Scripten erleichtert werden. Diese besteht aus drei Ebenen, die Scripting Hosts, die Scripting Engines und die

Bibliotheken, wobei die Komponenten der einzelnen Ebenen austausch- und erweiterbar sind. Über COM (Component Object Model)- Schnittstellen kommunizieren die einzelnen Schichten miteinander. Der Vorteil der Architektur liegt auf der Hand: Der Entwickler kann sich seine bevorzugte Umgebung „zusammenstellen“ und die erstellten Scripte sind sehr leicht portierbar.

2.1 Scripting Hosts

Die Scripting Hosts stellen die Anwendungen dar, in denen die Scripts letztlich zur Ausführung und Anwendung kommen. Sie bilden einen Container für die Scripts, wobei deren Sicherheit für das System sehr umstritten ist und häufig diskutiert wird. Fest steht jedoch, dass einige nicht zu unterschätzende Sicherheitslücken bestehen und auch, trotz einer Unzahl an Bugfixes, immer wieder neue entdeckt werden.

 

2.2 Scripting Engines

Die Scripting Engines sind dafür verantwortlich, dass der Quelltext richtig interpretiert wird. Hierbei ist die Scripting- Architektur offen für jede Scriptsprache. Das bedeutet nicht, dass man in jeder Sprache munter drauflosschreiben kann, in der Hoffnung, dass eine der Engines es schon verstehen wird. Vielmehr ist es möglich, jede Scriptsprache einzusetzen, für die eine Scripting Engine erhältlich ist. Bisher stellt Microsoft je einen „abgespeckten“ und speziell auf die Anforderungen von Windows zugeschnittenen Dialekt von Visual Basic und Java, VBScript und JScript zur Verfügung. Fremdanbieter arbeiten an eigenen Script Engines wie z.B. PerlScript [vgl PerlScript] oder Rexx.

 

2.3 Bibliotheken

Die Bibliotheken ermöglichen sowohl den Scripten, wie auch anderen Anwendungen den Zugriff auf Objekte, Methoden, Eigenschaften und Ereignisse. Man kann hierbei zwischen drei Hauptkategorien unterscheiden:

 

 

3 Programmierung

In diesem Kapitel sollen konkrete Programmiertechniken und -konventionen des Windows Scripting Hosts gezeigt werden. Auf andere Hosts wie z.B. den Internet Explorer soll nicht näher eingegangen werden, da es bei Beherrschung der Scriptsprache keinen großen Unterschied macht, auf welchem Host das Script ablaufen soll. Bei einfachen Scripts ist oftmals nicht mal eine Anpassung nötig.

3.1 Vorraussetzungen und Entwicklungswerkzeuge

Um mit dem WSH arbeiten zu können, muss er zunächst installiert werden. Seit Windows 98 gehört er zum Lieferungsumfang und kann somit per Windows- Setup hinzugefügt werden. Um unter Windows 95/NT den WSH nutzen zu können, muss er von den Microsoft Seiten [MS 2] heruntergeladen und installiert werden. Ist der WSH installiert, genügt ein Doppelklick auf das gewünschte Script, um es auszuführen. Ein Aufruf per Kommandozeile ist mittels „wscript“ (Windows) bzw. „cscript“ (MS-DOS- Eingabeaufforderung) gefolgt vom Dateinamen des auszuführenden Scripts möglich.

Zur Programmierung des Windows Scripting Hosts genügt ein einfacher Texteditor, der Textdateien im ASCII- Format speichern kann. Solche Editoren gibt es zur Genüge und in den verschiedensten Ausführungen, einen sehr einfachen [Editor] bringt jede Windows Version mit sich. Es ist sehr wichtig, dass die Scriptdateien die richtige Dateiendung haben, da der WSH anhand der Dateiendung erkennt an welche Script Engine er sich wenden muss z.b. „.vbs“, wenn die Datei VBScript enthält und „.js“, wenn sie JScript beinhaltet.

Da Microsoft bisher noch keine Entwicklungsumgebung à la Visual Studio für den WSH vertreibt, steht man beim Suchen der richtigen Objekte, Methoden und Eigenschaften, bzw. beim Testen der Scripte ziemlich alleine da. Dennoch kann man sich die Entwicklungsarbeit deutlich vereinfachen, indem man einen Editor einsetzt, der über eine Zeilennummerierung verfügt, da der WSH bei Fehlern im Script nur die Zeilen- und Spaltennummer über eine Dialogbox ausgibt. Ein hervorragendes Produkt stellt hierfür der M&I WinEditor [M&I] dar, da er über eine Zeilennummerierung verfügt und den WSH direkt aus dem Editor heraus aufrufen und das aktuelle Script als Parameter übergeben kann.
Bei der äußerst nervenaufreibenden Suche nach den richtigen Objekten hilft einem der Objektkatalog auf den man über den Visual Basic für Applikationen (VBA)- Editor der MS-Office Programme Zugriff hat. Er listet alle auf dem jeweiligen Computer registrierten Objekte, deren Methoden und Eigenschaften übersichtlich auf. Microsoft Word (ab Version 97) bietet einige Funktionen, u.a. auch eine Zeilennummerierung, die das Scripte schreiben deutlich vereinfacht.
Wer noch etwas mehr Komfort bei der Code- Eingabe bzw. über keine VBA- Anwendung verfügt, kann auf Visual Basic 5 CCE (Control Creation Edition) [MS 3] von Microsoft zurückgreifen. Dies ist im Grunde eine komplette Visual Basic 5 Entwicklungsumgebung, bei der lediglich die Funktion zum Erstellen von EXE- Dateien deaktiviert wurde.

 

3.2 Script Sprachen

Innerhalb der Windows Scripting Architektur werden die Script Sprachen Script Engines genannt (vgl. 2.2). Vom Microsoft Server [MS 4] lassen sich zwei Script Engines kostenlos herunterladen und installieren – VBScript und JScript. Mit diesen beiden Engines deckt Microsoft die beiden größten „Entwicklerlager“ VB und Java ab. Wobei VB mittlerweile zur Standardsprache im Microsoft- Umfeld erkoren wurde.

VBScript

Nicht nur alleine die Tatsache, dass VB die „Haus- und Hofsprache von Microsoft ist und stark gepuscht wird, auch die leichte Erlernbarkeit und die fehlertolerante Eingabemöglichkeiten haben zum großen Erfolg der Sprache geführt. Wer bereits mit VB oder VBA gearbeitet hat, wird sich sofort mit VBScript zurechtfinden. Aus dem VB- Funktionsumfang wurden lediglich einige für den Internetbereich uninteressante Komponenten entfernt. Das Programmieren in VBScript ist sehr einfach, so dass auch Neulinge schnell zu einem erfolgreichen Ergebnis kommen.

JScript

Wer Netscapes JavaScript beherrscht, kann im Grunde sofort funktionierende WSH- Scripte schreiben, da ECMA 262 Script [ECMA] und damit JavaScript als Grundlage für Microsofts JScript diente. Microsoft hat lediglich einige Netscape- spezifischen Befehle bei der Implementierung „übersehen“ und dafür den Funktionsumfang in Richtung des Internet Explorers erweitert. Bei der Codeeingabe lässt JScript jedoch nicht so viele Freiheiten wie VBScript, da die Syntax sehr stark an C angelehnt ist, sind z.B. mehr Deklarationen und mehr Aufmerksamkeit (Groß- Kleinschreibung) bei der Eingabe nötig, um fehlerfreie Scripts zu schreiben.

 

 

4 Objekte, Methoden und Eigenschaften des WSH

Der Windows Scripting Host selbst stellt verschiedene Methoden und Objekte für die Scriptprogrammierung zur Verfügung. In diesem Kapitel soll ein Ausschnitt vorgestellt und erläutert werden. Hierbei werden Beispiele ausschließlich in VBScript genannt, da meiner Ansicht nach JScripts auf den ersten Blick verwirrend wirken und die wesentlichen Punkte sich so schlechter erkennen lassen.

4.1 Ausgabemöglichkeiten

Die wohl einfachste Möglichkeit dem Benutzer etwas mitzuteilen ist die (von DOS bekannte) Echo- Methode. Diese Methode lässt sich direkt über den WSH ansprechen. Da das WScript Objekt den WSH repräsentiert, genügt somit ein Doppelklick auf eine Textdatei mit der Dateiendung „.vbs“ und dem Inhalt:

WScript.Echo "Script- Programmierung ist total einfach!"

und auf dem Bildschirm erscheint folgendes Fenster:

Über die fehlenden Gestaltungsmöglichkeiten der Echo- Methode verfügt die aus VB und VBA bekannte Methode MsgBox. Mittels der Methode- Parameter kann man nicht nur den Titel des Fensters, sondern auch das Symbol bestimmen, welches links neben dem Text und den gewünschten Buttons erscheint. Somit genügt die nachstehende Zeile Code, um dieses Fenster zu erzeugen:

MsgBox "Script- Programmierung ist total einfach!", vbInformation, "Wichtige Information!"

4.2 Eingabemöglichkeiten

Auf den ersten Blick bietet der WSH kaum Möglichkeiten für Benutzereingaben. Man kann zwar eine einfache Programmablaufsteuerung realisieren, in dem man den Rückgabewert der MsgBoxen auswertet, jedoch lässt sich damit z.B. kein String abfragen.

Um den Rückgabewert abfragen zu können, genügt es, eine Variable und ein „=“ vor die MsgBox- Methode zu schreiben. Wichtig ist hierbei nur, dass die Parameter der Methode jetzt in Klammern stehen müssen, sonst kann der WSH die Zeile nicht interpretieren.

erg = MsgBox("Ist Script- Programmierung total einfach?", vbQuestion + vbYesNo, "Frage")
if erg = vbYes then WScript.Echo "Richtig :-)" else WScript.Echo "Blödsinn!"

Dieses Script bittet den Benutzer um seine Meinung zur Scriptprogrammierung und kommentiert anschließend dessen Angaben.

In VBScript lässt sich aber mit der InputBox- Methode eine deutlich komfortablere Eingabe realisieren. Das Aussehen des Eingabefenster lässt sich über die Parameter anpassen, zwingend erforderlich ist jedoch nur die Angabe des Textes, der im Dialogfeld angezeigt werden soll:

erg = InputBox("Ist Script- Programmierung total einfach?", "Ihre Meinung?")
if e
rg = "" then WScript.Echo "Keine Meinung!" else WScript.Echo "Ihre Meinung: " + erg

Die Methode liefert als Ergebnis die Eingabe des Benutzers oder einen leeren String beim Drücken des Abbrechen- Buttons.

 

4.3 Weitere Methoden und Eigenschaften

Der WSH besitzt außerdem Eigenschaften, die detaillierte Informationen über den WSH selbst, die benutzte Scripting Engine und das aktuelle Script Preis geben. So lässt sich z.B. durch einfaches Auslesen der Eigenschaft WScript.Version die Version des WSH ermitteln. Die Methode ScriptEngineMajorVersion() liefert die Hauptversion der Script Engine und die Eigenschaft WScript.FullName beinhaltet den kompletten Pfad des aktuellen Scripts. Die beiden wichtigsten Methoden, welche die WSH- Programmierung erst richtig interessant werden lassen, sind die Methoden WScript.CreateObject und WScript.GetObject. Mit Hilfe dieser beiden Methoden erhält man Zugriff auf sämtliche auf dem System befindlichen Bibliotheken incl. deren Klassen und damit auch deren Objekte. Das folgende Beispiel soll zum einen die Einfachheit und zum anderen die Mächtigkeit dieser Methoden widerspiegeln:

Set myExcel = CreateObject("Excel.Application")

Auf die mit CreateObject erzeugte Instanz erhält man nun über die Objektvariable myExcel Zugriff.

MsgBox "Der Pfad von Excel lautet:" + chr(13) + myExcel.Path, vbInformation

Mittels dieser Message Box wird der Anwendungspfad von Excel ausgegeben.

Mit der GetObject- Methode kann man sogar Objekte instanzieren, die nicht registriert, aber deren Pfade bekannt sind.

 

4.4 Weitere Objekte

Eigentlich müsste der Beschreibung aller WSH- Objekte ein eigenes Kapitel gewidmet werden, doch um den Rahmen dieses Referates nicht zu sprengen, werden an dieser Stelle nur einige wenige Objekte vorgestellt. Anhand dieser Beispiele soll die Leistungsfähigkeit des WSH verdeutlicht werden.

WshShell

Eine Bearbeitung der Windows- Registrierung ermöglicht das WshShell- Objekt. Es stellt u.a. die Methoden RegRead (Auslesen eines Schlüssels oder Wertes), RegWrite (Erstellen/Verändern) und RegDelete (Löschen) zur Verfügung.

Shortcuts lassen sich mit dem WshShell- Objekt komfortabel erstellen, verändern und löschen. Eine der interessantesten Methoden  ist die Run- Methode. Sie führt den als Parameter übergebenen Prozess bzw. die übergebene Anwendung in der gewünschten Fensterform (minimiert, maximiert, etc.) aus.

WshNetwork

Den Zugang zu Netzwerkressourcen und - Informationen erhält man über das WshNetwork- Objekt. So lassen sich z.B. über die Eigenschaften ComputerName, UserDomain und UserName den Namen und die Domäne des Rechners und der Benutzername ermitteln.
Dass sich der WSH auch hervorragend für administrative Aufgaben einsetzen lässt, zeigt folgendes Beispiel: Mit nur zwei Zeilen VBScript kann man eine Druckerverbindung zu einem Netzwerkdrucker anlegen.

Set mjWshNw = WScript.CreateObject("WScript.Network")
mjWshNw.AddPrinterConnection "LPTPort", "\\Rechnername\Drucker"

Die Vorgehensweise beim Zuweisen von Netzwerklaufwerken ist sehr ähnlich. Die Methode MapNetworkDrive erwartet als Parameter den gewünschten lokalen Laufwerksbuchstaben und die Netzwerkressource.

FileSystemObject

Hinter dem FileSystemObject versteckt sich ein komplettes Objektmodell mit mehreren Objekten, Methoden und Eigenschaften, die einen direkten Zugriff auf Laufwerke, Ordner und Dateien ermöglichen. Mit wenigen Zeilen lassen sich so Ordner und Dateien kopieren, verschieben und löschen, Dateiattribute verändern und Textdateiinhalte bearbeiten.

SendKeys

Diese Methode ist eine der mächtigsten, die dem WSH zur Verfügung stehen. Sie kann für viele programmübergreifende Aufgaben innerhalb eines Scripts genutzt werden. Mit SendKeys kann man jedem beliebigen Programm Tastatureingaben „vorgaukeln“ und ist somit nicht auf die VBA- Fähigkeit der fernzusteuernden Anwendung angewiesen. Das Rechner- Beispiel im Anhang zeigt dies anschaulich.

 

 

5 Ausblick

Mit dem Windows Scripting Host stellt Microsoft endlich die sowohl von den Entwicklern wie auch den Anwendern geforderte Automatisierungskomponente für Windows- Betriebssysteme bereit. Trotz der hervorragenden Integration in die bestehende COM- Architektur und der gigantischen Anwendungsvielfalt durch die problemlose Nutzung aller Office (VBA)- Komponenten kann und wird sich der WSH nicht durchsetzen, wenn Microsoft in die nächsten Versionen nicht einige Verbesserungen einbaut.
Dies wäre zum einen der gravierendste Nachteil, der fehlende Makrorekorder. Wenn dem Anwender ein solches Programm zur Verfügung stehen würde, welches einfach alle Aktionen des Benutzers in Scriptcode- Form festhält, eine „Nachbearbeitung“ zulässt und ihn dies dann beliebig oft abspielen lässt, wäre ein großer Schritt in eine erfolgreiche Zukunft getan.
Der zweite Grund, welcher sich erfolgshemmend auswirkt, ist die unbefriedigende Dokumentation. Was nutzt dem Entwickler denn die Tatsache, dass er auf alle nur möglichen Windows- und Office- Objekte Zugriff hat, er aber erst nach (stunden-) langem Suchen die richtigen Bibliotheken, Objekt-, und Methodennamen findet.
Dennoch glaube ich, dass es eines Tages keinen Unterschied mehr macht, ob man innerhalb einer Anwendung auf Betriebssystemebene oder in einer Entwicklungsumgebung programmiert. Diese Umgebungen werden verschmelzen und der WSH ist zumindest ein Schritt, wenn auch ein kleiner, in die richtige Richtung.