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.
