LotusScript und der WSH

15.06.2006 von Elmar Fuchs
Der Windows Script Host (WSH) erlaubt es, typische administrative Aufgaben im Windows-Bereich mittels kleiner Skripts zu erledigen. Neben den beiden von Microsoft für diese Anwendung vorgesehenen Scriptsprachen VBScript und JScript können Sie auch LotusScript einsetzen, um die Möglichkeiten des WSH zu nutzen.

Der Windows Script Host (WSH) oder auch Windows Scripting Host stellt im Betriebssystem Windows eine ActiveX-Schnittstelle dar, die mit verschiedenen Programmiersprachen genutzt werden kann. In erster Linie geschieht dies überdie Microsoft-Skriptsprachen VBScript und JScript. Aber auch über diverse Hochsprachen und weitere Skriptsprachen wie zum Beispiel LotusScript kann die Schnittstelle angesprochen werden.

Den WSH gibt es seit den Versionen Windows 95 bzw. Windows NT. In diesen Versionen war es jedoch noch notwendig, den WSH separat zu installieren. Seit Windows 98 bzw. Windows 2000 wird der WSH per Standard installiert und ist in den Internet Explorer integriert.

Ziel der Entwicklung des WSH war die Erleichterung der Administrationsarbeit. Administratoren können sich durch die Programmierung von Skripts die Erledigung häufig anfallenderRoutinearbeiten wesentlich einfacher gestalten. In den Windows-Versionen bis 3.x (in Verbindung mit DOS) bzw. Windows NT 3.5x war dies nur sehr eingeschränkt mittels Batchdateien möglich. Im Vergleich dazu standen in anderen Betriebssystemen wie OS/2 oder Unix komfortable Programmiersprachen zur Lösung administrativer Aufgaben zur Verfügung. Das Fehlen einerderartigen Möglichkeit unter Windows war einer der Gründe, warum Windows lange Zeit von manchem Administrator nicht als vollwertiges Betriebssystem anerkannt wurde.

Objekte des WSH

Der WSH verfügt insgesamt über 14 Objekte. Die über die Objekte zur Verfügung gestellten Möglichkeiten lassen sich grob in zwei Bereiche unterteilen: Der erste umfasst Standardaufgaben und die Ausgabe von Mitteilungen, der zweite Hilfsfunktionen wie zum Beispiel das Verwalten von Umgebungsvariablen, das Erstellen von Anmeldeskripts und das Herstellen von Verbindungen zu Druckern. Folgende Objekte stehen neben anderen im WSH zur Verfügung:

Neben den Objekten des WSH stellt Ihnen die Laufzeitumgebung weitere Objekte zur Verfügung, zum Beispiel das Objekt FileSystemObject. Über dieses haben Sie Zugriff auf das Dateisystem.

Das Objekt WScript.Shell

Über den Befehl CreateObjekt erzeugen Sie in hrem LotusScript-Programmcode ein Objekt WScript.Shell:

Dim wsh As Variant
Set wsh = CreateObject("WScript.Shell")

Anschließend können Sie zum Beispiel Netzwerklaufwerke mappen, Anwendungen starten, Umgebungsvariablen setzen, die Spezialordner von Windows auslesen, Verknüpfungen auf dem Desktop erstellen oder Werte der Windows-Registry lesen, schreiben und löschen. Die Tabelle 1 listet die Eigenschaften und Methoden des Objekts WScript.Shell auf.

Tabelle 1: Die Eigenschaften und Methoden von WScript.Shell.

Objekt

Anwendung

CurrentDirectory

Die Eigenschaft liefert das Arbeitsverzeichnis des aktuellen Prozesses zurück.

Environment

Die Eigenschaft Environment liefert alle Umgebungsvariablen als Objekt WshEnvironment.

SpecialFolders

Die Windows Systemordner erhalten Sie durch die Abfrage der Eigenschaft SpecialFolders als Objekt der Klasse WshSpecialFolders.

CreateShortcut()

Mit der Methode erstellen Sie einen neuen oder öffnen einen vorhandenen Shortcut.

Exec Method()

Die Methode ermöglicht die Ausführung einer Kommandozeilenanwendung.

ExpandEnvironmentStrings()

Verwenden Sie diese Methode für den Zugriff auf Umgebungsvariablen.

LogEvent()

Mit der Methode LogEvent() erstellen Sie einen Eintrag in eine Logdatei.

Popup()

Zur Anzeige eines Meldungsfensters verwenden Sie die Methode Popup().

RegDelete()

Mit der Methode RegDelete() löschen Sie einen Wert oder einen Schlüssel in der Windows-Registry.

RegRead()

Die Methode gibt den Inhalt eines Wertes oder den Standardwert eines Schlüssels der Windows-Registry zurück.

RegWrite()

Die dritte Methode dient zur Bearbeitung der Windows-Registry. Sie erstellt einen neuen oder überschreibt einen vorhandenen Schlüssel bzw. Wert.

Run()

Die Methode Run() startet ein Programm.

SendKeys()

Mit dieser Methode können Sie Tastenanschläge so an das aktive Programm senden, als ob sie auf der Tastatur eingegeben würden.

Special Folders

Die Eigenschaft SpecialFolders enthält eine Sammlung der speziellen Windows-Systemordner. Greifen Sie mit LotusScript auf die gesamte Sammlung zu, können Sie diese als Feld verwenden. Das Beispiel in Listing 1 liest der Reihe nach alle definieren Systemordner aus und verkettet deren Namen in einer Variablen vom Typ String. Abschließend wird der gesamte Inhalt in einem Mitteilungsfenster vom Typ MessageBox ausgegeben (Bild 1).

Bild 1: Die Ausgabe des Skripts.

Sub Click(Source As Button)
Dim wsh As Variant
Dim i As Integer
Dim text As String
On Error Goto Fertig
Set wsh = CreateObject("Wscript.Shell")
i = 0
text = ""
While wsh.SpecialFolders(i)<>""
text = text + wsh.SpecialFolders(i) + Chr(13)
i = i +1
Wend
Exit Sub
Fertig:
Msgbox "Es sind " + Cstr(i) + " Spezialordner vorhanden"
+ Chr(13) + Chr(13) + text, 64, "Systemordner"
Exit Sub
End Sub

Eine weitere Möglichkeit ist die Erstellung einer Verknüpfung in einem Systemordner. Dabei können die einzelnen Ordner direkt über ihren Namen angesprochen werden. Beispiele für einzelne Ordnernamen sind

Der folgende LotusScript-Programmcode erzeugt – die nötigen Zugriffsrechte vorausgesetzt – in der Autostartgruppe für alle Benutzer eine Verknüpfung auf Lotus Notes:'

Dim Link As Variant
Set wshshell = CreateObject("WScript.Shell")
autodir = wshshell.SpecialFolders("AllUsersStartUp")
neuerlink = autodir & "\Notes.lnk"
Set link = wshshell.Createshortcut(neuerlink)
link.TargetPath = "notes.EXE"
Call link.Save

Die Windows-Registry bearbeiten

Die Methoden RegWrite(), RegRead() und RegDelete() ermöglichen das Schreiben, Lesen und das Löschen von Schlüsseln und Werten in der Windows- Registry.

Als Parameter erwarten alle drei Methoden die Angabe des Schlüssels oder des Wertnamens, RegWrite() benötigt zusätzlich noch den Wert und optional den Datentyp.

Durch das Hinzufügen eines Backslashs am Ende wird ein Schlüssel als solcher gekennzeichnet. So erstellt

wsh.regwrite "HKCUxperts", "LotusScript"

einen Wert mit dem Namen Experts und dem Wertinhalt LotusScript. Im Gegensatz dazu erstellt

wsh.regwrite "HKCUxperts\", "LotusScript"

einen Schlüssel Experts mit dem Standardwert LotusScript.

Um die einzelnen Hauptschlüssel anzusprechen, können Sie wie schon gesehen folgende Abkürzungen verwenden:

Für die beiden Hauptschlüssel HKEY_USERS und HKEY_CURRENT_CONFIG gibt es keine Abkürzungen.

Der folgende Programmcode erstellt einen Wert mit dem Namen Experts und dem Inhalt LotusScript direkt unterhalb des Schlüssels HKEY_ CURRENT_USER. Gibt es den Schlüssel an dieser Stelle bereits, wird der vorhandene Wert überschrieben.

Dim wsh As Variant
Set wsh = createobject("Wscript.shell")
wsh.regwrite "HKCUxperts", "LotusScript"

Das Auslesen des Wertes erfolgt über die MethodeRegRead()

Msgbox wsh.regread("HKCU\experts")

Zum Entfernen des Schlüssels rufen Sie die Methode RegDelete() für das Objekt auf.

wsh.regdelete "HKCU\experts"

Obwohl der WSH wegen seiner engen Verbindung zwischen Betriebssystem, Internet Explorer und Outlook und der damit einhergehenden Gefahr durch Computerviren, Würmern und anderen Schadprogrammen häufig kritisiert wird, ist er bei einer verantwortungsbewussten Nutzung seiner Möglichkeiten ein mächtiges Werkzeug zur Steuerung von administrativen Windows- Prozessen.

Ein Beispiel für die Anwendung unter Lotus Notes finden Sie im Artikel „Web Services mit SOAP nutzen“ dieser Ausgabe der Expert´s Inside Lotus Notes/Domino.