Admin VB Skripte - Scripting Basics

Ich möchte hier allgemeine Tipps für den grundsätzlichen Aufbau von Skripten geben, also ein paar praktische Grundlagen, um schnell ein lauffähiges Skript für administrative Tasks erstellen zu können.
Wichtig erscheint mir dabei vor allem, dass Skripte modular aufgebaut sind - den Code also in Funktionen oder Subroutinen zu gliedern. Diese Subroutinen oder Funktionen bekommen definierte Übergabeparameter zur Bearbeitung und liefern Rückgabewerte, die im weiteren Skriptablauf benutzt werden können.
Damit hat man bereits ein kleines Framework mit grundlegener Funktionalität, das sich durch einfaches Kopieren der Routinen in andere Skripte immer wieder verwenden lässt.
Wie solch ein Satz an Routinen in eine Datei ausgelagert werden kann und sich durch wenige Code Zeilen in jedes beliebige VB Skript wieder eingebunden lässt, will an anderer Stelle noch zeigen.

In jedes Skript gehören meiner Meinung nach Headerzeilen mit allgemeinen Infos.

'Name: MyScript.vbs Version 1.0
'Autor:
'Beschreibung:
'Aufruf Parameter:
'Änderungen:

Die folgende Tabelle zeigt Konstanten, Variablen und Code Fragmente, die ich in fast jedem meiner Skripte an den Anfang stelle.

Option Explizit Das zwingt dazu, dass alle Variablen mit DIM bekannt gemacht werden müssen. Wird jetzt eine Variable ohne DIM Anweisung verwendet, dann bricht das Skript ab.
On ERROR Resume NEXT Bei möglichen Fehler im Skriptablauf soll das Skript mit dem nächsten Befehl fortfahren.
Das gibt uns die Möglichkeit Fehler abzufragen und darauf zu reagieren.
Viele interne Funktionen liefern im Fehlerfall einen Wert > 0 zurück, was mit If Err.Number Then ... End If abgefragt werden kann.
On ERROR Resume NEXT
sollte im Hauptskript und in allen Subroutinen oder Funktionen stehen.
CONST FOR_READING = 1
CONST FOR_WRITING = 2
CONST FOR_APPEND = 8
Definierte Konstanten z.B. für das Öffnen von Dateien erleichtern das Lesen des Skripts.

Dim WshShell, WshFso, WshNet,
oInFile, oOutFile, oLogFile, strPathToScript, strLogFile, strInFile, strOutFile
Diese globalen Variablen benutze ich häufig für Dateioperationen.
Es ist guter Stil, dass in Variablennamen durch eine Prefix der Typ der Variable gekennzeichnet wird.
Eine Variable, von der wir wissen, dass sie einen String repräsentiert, bekommt z.B. den Namen strVariable.
Set WshFso = CreateObject("Scripting.FileSystemObject") Die globale Variable WshFso bekommt mit dem Set-Befehl eine Referenz (CreateObject) auf ein FileSystem Objekt zugewiesen.
Diese Objektreferenz verwenden wir in Dateioperationen in der Subroutine CreateFileObjects().
Set WshShell = CreateObject("Wscript.Shell") Die globale Variable WshShell benötigen wir als Objektreferenz, um darüber z.B. externe Programme starten zu können.
strPathToScript = Left(WScript.ScriptFullName,(Len(WScript.ScriptFullName) - (Len(WScript.ScriptName) + 1))) & "\" Die globale Variable strPathToScript liefert uns den aktuellen Pfad, in dem das Skript gestartet wird.
strLogfile = strPathToScript & Mid(WScript.ScriptName,1, InStr(1,WScript.ScriptName,".")-1) & ".log Oft wird ein Logfile benötigt, wofür hier die globale Variable strLogFile erzeugt wird. Die Datei bekommt den Namen Skriptname.log und wird später mit der Subroutine CreateFileObjects() im Pfad des Skripts erzeugt.

Die obigen Code Fragmente bauen wir in Funktionen bzw. Subroutinen ein, die im folgenden beschrieben werden.
Sub CreateFileObjects() Mit dieser Subroutine erzeugen wir die File Handles für unsere Eingabe-, Ausgabe- und Logdatei.
Function CheckScriptHost() Mit dieser Funktion stellen wir fest, welcher Skripting Host eingestellt ist.
Function IsAlive() Mit dieser Funktion können wir feststllen, ob ein Computer erreichbar ist und bekommen seine IP Adresse.
Sub PrintLog() Mit dieser Subroutine schreiben wir Status- oder Fehlermeldungen in eine Datei.

Hinweis:
An Subroutinen und Funktionen können Parameter übergeben werden, aber nur Funktionen können einen Rückgabewert liefern.

Die hier beschriebenen Variablen, Code Fragmente, Subroutinen und Funktionen verwende ich an beliebiger Stelle auf dieser Web Site, ohne sie dort explizit zu erklären.

Auch in den Skript Distrib2Folder.vbs, GetServerHardware.vbs und GetServerSoftware.vbs werden die obigen Routinen eingesetzt.