Windows NT - Einführung und Konzepte

Kapitel 10: Command-Skripte

Überblick

Letzte Änderung: 15.6.98 von B. Tritsch

Zurück zum Index "PC-und MS-Windows-Support"

Zurück zum Inhalt


Im folgenden werden Beispiele für die Windows NT Skriptsprache vorgestellt, die helfen sollen die tägliche Arbeit in einer NT-Domäne zu vereinfachen.

Die Grundlagen

Windows NT wird mit einer einfachen Skriptsprache ausgeliefert. Im Grunde genommen ist diese CMD-Sprache ein Superset des unter MS-DOS gewohnten Batch-Sprachumfangs. Besonders hervorzuheben sind die Möglichkeiten, Windows-Anwendungen aus der Kommandozeile, d.h. aus der CMD-Sprache, mit verschiedenen Parametern aufzurufen.

Die NT-Kommandosprache besitzt im Gegensatz zu höheren Programmiersprachen keine besonderen Regeln für den Aufbau. Es müssen weder Variablen noch Unterfunktionen deklariert werden. Skripts in der Kommandosprache werden im einfachsten Fall Zeile für Zeile abgearbeitet. Dennoch sollte innerhalb von Skripts auf die Einhaltung einer sauberen Strukturierung geachtet werden. Für die korrekte Ausführung eines Kommandos spielt es keine Rolle, ob es in Groß oder in Kleinbuchstaben geschrieben wird.

Zur Dokumentation eines Skripts sollten aussagekräftige Kommentare integriert werden. Eine Kommentarzeile wird immer durch das Kommando Rem eingeleitet. Die Ausgabe von textuellen Nachrichten erfolgen durch den Befehl Echo. Auf diese Weise kann ein Benutzer über den Erfolg oder den Mißerfolg einer Aktion unterrichtet werden. Eine weitere Funktion des Echo-Kommandos besteht in der Möglichkeit, die Ausgabe einer Befehlszeile ein- oder auszuschalten, bevor sie ausgeführt wird. "Echo off" sorgt für die Unterdrückung der Ausgabe aller Zeilen, mit Ausnahme jener Zeilen, die mit "Echo" beginnen. Wird ein "@"-Zeichen vor das Kommando "Echo off" gesetzt, wird auch diese Zeile selbst unterdrückt. Wird ein Punkt direkt hinter das Echo-Kommando gesetzt, erfolgt die Ausgabe einer leeren Zeile. Dies wird oftmals für die Trennung zwischen Ausgabezeilen benötigt.

Absolute und bedingte Sprünge innerhalb von Skripts lassen sich ähnlich wie unter Basic mit dem Befehl Goto erreichen. Als Sprungziel wird eine Markierung verwendet, die durch einen vorangestellten Doppelpunkt gekennzeichnet ist.

Ähnlich wie bei Programmen können auch einem Skript Parameter übergeben werden, die ausgewertet werden können und so das Laufzeitverhalten bestimmen. Eine Skriptdatei kann bis zu neun Parameter verarbeiten, die über die Bezeichner %1, %2, ..., %9 angesprochen werden. Über den reservierten Bezeichner %0 erhält man Zugriff auf den Namen des ausgeführten Skripts. Bei den Parametern sollte beachtet werden, daß zwischen Groß- und Kleinbuchstaben unterschieden wird.

Neben übergebenen Parametern können innerhalb von Skripts Umgebungsvariablen verwendet werden. Die Namen dieser Umgebungsvariablen müssen dabei von Prozentzeichen eingeschlossen werden. Auch das Setzen von Umgebungsvariablen ist über den Set-Befehl möglich. Hierbei sollte jedoch beachtet werden, daß die in einer NT-Shell gesetzten Variablen nur für den Kontext der Shell gültig sind. Eine weitere NT-Shell hat keinen Zugriff auf diese neue Umgebungsvariable.

Der If-Befehl ermöglicht die Ausführung von Kommandos in Abhängigkeit zu bestimmten Ereignissen. Ist eine If-Bedingung erfüllt, so wird der Rest der Zeile ausgeführt. Andernfalls wird der Befehl in der nächsten Zeile verwendet. Hierdurch ist es möglich die Existenz von Dateien, Verzeichnissen, Geräten, Variablenwerten, Zeichenfolgen oder Rückgabewerten von Programmen abzufragen.

Die Programmierung von Schleifen läßt sich über den For-Befehl realisieren. Dieser besitzt eine sehr komplexe Syntax, die jedoch auch rekursive Operationen für Dateien erlaubt.

Ein direkter Aufruf von anderen Skripts aus einem Skript führt meist nicht zu dem gewünschten Erfolg. Zwar wird das aufgerufene Skript ausgeführt, jedoch kehrt dieses nicht an die aufrufende Stelle im ersten Skript zurück. Hierzu dient das Kommando Call mit dem aufzurufenden Skriptnamen als Parameter. Der Call-Befehl ist "reentrant", das heißt, daß nach der Ausführung des aufgerufenen Skripts an der Stelle weitergearbeitet wird, an der der Skriptaufruf stattgefunden hat.

Um die Möglichkeiten eines CMD-Skripts ein wenig aufzuzeigen, soll nach einer kurzen Befehlsübersicht ein Backup-Szenario als Grundlage dienen: Es besteht der Wunsch, mit Hilfe eines NT-Servers Backups von verschiedenen Verzeichnissen zu machen, die sowohl auf Windows for Workgroups, Windows 95 oder Windows NT Workstations liegen können. Am NT-Server soll ein Exabyte-Bandlaufwerk angeschlossen sein. Auf den Clients ist keine zusätzliche Backup-Software eingerichtet.

Befehlsübersicht

Die wichtigsten Befehle, die in der Shell oder in einer Skript-Datei verwendet werden können sind folgende:

Speziell der net-Befehl verdient eine genauere Betrachtung:

Das Backup-Skript

Es soll nun mit Hilfe eines NT-Servers Backups von verschiedenen Verzeichnissen gemacht werden, die sowohl auf Windows for Workgroups, Windows 95 oder Windows NT Workstations liegen können. Am NT-Server soll ein Exabyte-Bandlaufwerk angeschlossen sein. Um das Band möglichst wenig zu belasten, wird auf dem NT-Server eine Puffer-Platte installiert, die etwas größer ist, als das potentiell größte zu sichernde Verzeichnis. Das bedeutet im Klartext, daß der freie Plattenplatz auf dem NT-Server größer ist als jede zu sichernde Partition auf einer Client-Maschine. Der Grund für die Puffer-Platte besteht in der Problematik von langsamen Netzverbindungen bei gleichzeitig potentiell schnellem Schreiben auf das Band. Kommen die Daten zu langsam beim Bandlaufwerk an, so fährt es regelmäßig den Schreibkopf in eine Wartestellung und zurück. Diese Aktion altert das Band jedoch künstlich zu schnell und verursacht häufige Fehler. Aus diesem Grund sollte das Schreiben auf Band von einer lokalen Platte erfolgen. Das Sichern der Daten geschieht daher in zwei Stufen: Kopieren der Daten auf die Puffer-Platte und schreiben der gepufferten Daten auf das Band.

Der NT-Server soll sich immer mit der Client-Maschine verbinden können, ohne daß die Sicherheit der Client-Maschine beeinträchtigt ist. Hierzu werden alle zu sichernden Verzeichnisbäume versteckt exportiert und mit Password geschützt. Dies geschieht entweder mit dem Dateimanager und den Menüpunkten <Datenträger> und <Freigeben als...> oder mit den adäquaten Mechanismen der Win95-Oberfläche. Durch Beenden des Freigabenamens mit einem "$"-Zeichen, wird dieser Name verdeckt exportiert, d.h. er ist in keiner Browserliste sichtbar, sehr wohl aber ansprechbar. Wird das Verzeichnis zusätzlich mit einem Password geschützt, ist größte Sicherheit gewährleistet. Der einzige Nachteil besteht darin, daß dieses Password im Skript auf dem NT-Server in Klartext ausgeschrieben wird. Das Skript kann jedoch wiederum durch beschränkte Zugriffsmöglichkeiten auf dem NT-Server geschützt werden (z.B. nur für Administratoren).

Die Funktionsweise des unten vorgestellten Skripts ist folgendermaßen:

  1. Lösche Logdateien von möglichen vorhergehenden Backup-Aktionen
  2. Verbinde den NT-Server (Name: NTBKPSRV) mit Hilfe des "net"-Befehls zu einem Client-PC (Name: PC999). Die Kennung des resultierenden Netzlaufwerkes soll "s:" sein. Das zu verbindende Clientlaufwerk mit den Daten sei "XXX$" (Versteckter Name).
  3. Kopiere alle Daten von "s:" zum lokalen Verzeichnis g:\BACKUP\PC999\XXX$ und schreibe eine Logdatei namens BKPLOG.TXT darüber.
  4. Gebe Netzlaufwerk "s:" wieder frei.
  5. Starte das Windows-Programm NTBACKUP und sichere die kopierten Daten damit auf Band. Schreibe die Logdatei BANDLOG.TXT darüber.
  6. Lösche die Daten auf g:\BACKUP\PC999\XXX$ rekursiv.
echo Schreibe User-Platte von PC999 auf die X-Platte von NTBKPSRV
echo Loesche alte Logdateien
del x:\BACKUP\PC999\BKPLOG.TXT
del x:\BACKUP\PC999\BANDLOG.TXT
echo Stelle Verbindung zu Laufwerk S: her
net use s: \\pc999\XXX$
echo Kopiere alle Daten nach Laufwerk G:
xcopy s:*.* g:\BACKUP\PC999\XXX$ /S /E /H /C > g:\BACKUP\PC999\BKPLOG.TXT
echo Kopieren beendet, Laufwerk S: freigeben
net use s: /d
echo Schreibe die gesicherten Daten auf Band
NTBACKUP BACKUP G:\BACKUP\PC999\XXX$ /a /D "PC999" /HC:ON /T NORMAL /L "g:\BACKUP\PC999\BANDLOG.TXT"
echo Loesche die Daten auf G:
del /s /q g:\BACKUP\PC999\XXX$\*.*
echo Sicherung fuer PC999 erfolgreich beendet
echo.

Ein Login-Skript

Login-Skripts können zur Ausführung bestimmter Aktionen beim Anmelden eines Benutzers genutzt werden. Ein Administrator kann dabei verschiedene Login-Skripts unterschiedlichen Benutzergruppen oder sogar individuellen Benutzern zuordnen. Die Login-Skripts befinden sich dabei standardmäßig im Verzeichnis %SystemRoot% \System32 \Repl \Import \Scripts.

Die Funktionalität von Login-Skripts belaufen sich in erster Linie auf die Anbindung von Netzwerklaufwerken und die Übermittlung von wichtigen administrativen Nachrichten. Weiterhin können dem Benutzer Statusmeldungen oder benötigte Konfigurationsparameter mitgeteilt werden.

Das hier vorgestellte Login-Skript unterscheidet zunächst zwischen Clients unter Windows NT und Clients unter DOS/Windows 95. Dies wird durch die unterschiedlichen Möglichkeiten der jeweiligen Umgebungen begründet. So existiert unter Windows 95 für den Net-Befehl nicht die Option "/USER:<Benutzername>". Danach werden spezifische Aktionen für DOS/Windows 95 bzw. Windows NT durchgeführt, denen ein gemeinsamer Bereich von auszuführenden Kommandos für beide Umgebungen folgt.

Die Kommandos des Login-Skripts bewirken im Detail folgende Aktionen:

 
@ECHO OFF
if %OS%==Windows_NT goto NT
 
:DOS
cls
echo.
echo Logon Script for Department XXX
echo DOS/Windows 95
echo.
goto END
 
:NT
cls
echo.
echo Logon Script for Department XXX
echo Windows NT
echo.
echo You are member of the Domain %userdomain%
echo The name of your PC is %computername%
echo.
if not exist u:\. net use u: \\smbsrv\%username% /USER:%username% /PERSISTENT:YES
goto END
 
:END
if not exist p:\. net use p: \\smbsrv\public
rem Calling server-based scripts for management
call \\ntsrv5\SCRIPTS$\motd.bat
call \\ntsrv5\SCRIPTS$\query.bat
if exist u:\%username%.bat call u:\%username%.bat
 

Zum nächsten Kapitel