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.
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.
Die wichtigsten Befehle, die in der Shell oder in einer Skript-Datei verwendet werden
können sind folgende:
- at: Steuert den zeitlichen Ablauf von Befehlen und Programmen
- attrib: Zeigt die Dateiattribute an oder ändert diese
- backup: Legt eine Sicherungskopie von einer oder mehreren Dateien auf
einem anderen Datenträger an
- cacls: Zeigt die Zugriffskontrollisten (ACL, Access Control List) für
Dateien an oder ändert sie
- chkdsk: Erstellt einen Datenträger-Statusbericht, zeigt logische
Fehler an und behebt diese
- cmd: Startet eine neue Instanz des Befehls-interpreters CMD.EXE von
Windows NT
- comp: Vergleicht den Inhalt zweier Dateien oder Mengen von Dateien
byteweise
- compact: Zeigt die Komprimierung von Dateien oder Verzeichnissen an
oder ändert diese
- convert: Wandelt FAT- oder HPFS-Datenträger in NTFS-Datenträger um
- doskey: Startet das Programm Doskey, mit dem Befehle von Windows NT
wiederholt, Befehlszeilen bearbeitet und Makros erstellt werden können
- expand: Erweitert (dekomprimiert) eine oder mehrere komprimierte
Dateien
- fc: Vergleicht zwei Dateien und zeigt die Unterschiede zwischen den
beiden Dateien an
- find: Sucht in einer oder mehreren Dateien nach dem angegebenen Text
- findstr: Sucht nach bestimmten Zeichenfolgen in Dateien
- finger: Zeigt Informationen über einen Benutzer an einem angegebenen
System, das den Finger-Dienst ausführt
- ftp: Überträgt Dateien zu und von einem Knoten, der den
FTP-Serverdienst (FTP-Daemon) ausführt
- goto: Windows NT springt in einem Stapelverarbeitungsprogramm zu einer
durch eine Marke gekennzeichneten Zeile
- help: Liefert Online-Informationen zu den Befehlen von Windows NT
- ipconfig: Zeigt alle aktuellen TCP/IP-Netzwerkkonfigurationswerte an
- ipxroute: Verwaltet die Quell-Routing-Variablen des NWLink-Protokolls
auf einem Token-Ring-Netzwerk
- lpq: Liefert den Status einer Druckwarteschlange auf einem Host, der
den LPD-Server ausführt
- lpr: Druckt eine Datei zu einem Host, der einen LPD-Server ausführt
- more: Gibt Ausgaben bildschirmweise aus
- nbtstat: Zeigt die Protokollstatistik und die aktuellen
TCP/IP-Verbindungen an, die NBT (NetBIOS over TCP/IP) verwendet
- net: Befehlsgruppe zum Anzeigen und Konfigurieren von
Netzwerkfunktionalitäten
- netstat: Zeigt Protokollstatistiken und aktuelle
TCP/IP-Netzwerkverbindungen an
- ntbooks: Greift auf die Online-Dokumentation zu Windows NT zu
- ping: Überprüft die Netzwerkverbindung zu einem oder mehreren
Fern-Hosts
- rcp: Dieser Connectivity-Befehl kopiert Dateien zwischen einem Windows
NT-Computer und einem System, das den Fern-Shell-Server rshd ausführt.
- set: Setzt oder löscht Windows NT-Umgebungsvariablen
- shell: Bestimmt den Namen und die Position eines alternativen
Befehlsinterpreters, den Windows NT für das MS-DOS-Teilsystem verwendet.
- sort: Liest Eingaben, sortiert Daten und gibt das Ergebnis auf dem
Bildschirm, in eine Datei oder über ein anderes Gerät aus
- start: Erstellt ein neues Fenster, um ein angegebenes Programm oder
einen angegebenen Befehl auszuführen (Hintergrundprozesse = UNIX &)
- tracert: Traceroute-Programm
- type: Zeigt den Inhalt einer Textdatei an
- xcopy: Kopiert Dateien und Verzeichnisse einschließlich der
Unterverzeichnisse
Speziell der net-Befehl verdient eine genauere Betrachtung:
- net accounts: Zeigt oder setzt Passworte bzw. Logon-Anforderungen von
Servern in einer Domäne
- net computer: Fügt Computer zu einer NT-Domäne (nur für Server)
- net config: Zeigt die kontrollierbaren Services an, die momentan laufen
- net config server: Zeigt oder verändert den Server-Service, während
er läuft
- net config workstation: Zeigt oder verändert den Workstation-Service,
während er läuft
- net continue: Reaktiviert angehaltene Services
- net file: Anzeige der geöffneten exportierten Dateien auf einem Server
- net group: Addiert, zeigt und verändert globale Gruppen
- net help: Zeigt alle net-Befehl-Optionen
- net helpmsg: Liefert Hilfen zu Netzwerkfehlermeldungen
- net localgroup: Addiert, zeigt und verändert lokale Gruppen
- net name: Addiert, zeigt und verändert Messaging-Namen einer
Workstation
- net pause: Hält Services oder exportierte Drucker an
- net print: Zeigt oder kontrolliert Druckaufträge
- net send: Schickt Nachrichten zu anderen Workstations über das
Netzwerk
- net session: Listet Verbindungen zwischen Workstations und Server auf
oder trennt sie
- net share: Erzeugt oder löscht exportierte Ressourcen bzw. zeigt sie
an
- net start: Startet Services oder zeigt sie an
- net statistics: Zeigt den Statistik-Log an
- net stop: Hält einen Netzwerk-Service an
- net time: Synchronisiert die Systemzeit mit einem Server
- net use: Verbindet/trennt einen Computer zu/von einer exportierten
Ressource
- net user: Addiert oder modifiziert Informationen des Benutzer-Accounts
- net view: Zeigt eine Liste der Server bzw. deren exportierte Ressourcen
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:
- Lösche Logdateien von möglichen vorhergehenden Backup-Aktionen
- 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).
- Kopiere alle Daten von "s:" zum lokalen Verzeichnis g:\BACKUP\PC999\XXX$ und
schreibe eine Logdatei namens BKPLOG.TXT darüber.
- Gebe Netzlaufwerk "s:" wieder frei.
- Starte das Windows-Programm NTBACKUP und sichere die kopierten Daten damit auf Band.
Schreibe die Logdatei BANDLOG.TXT darüber.
- 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.
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:
- Ermittlung des Client-Betriebssystems und Sprung zum zugehörigen Skriptbereich.
- Für Clients unter DOS/Windows 95: Ausführen von spezifischen Kommandos
(Skriptbereich mit der Sprungmarke ":DOS").
- Für Clients unter Windows NT: Ausführen von spezifischen Kommandos (Skriptbereich
mit der Sprungmarke ":NT"). Falls der Laufwerksbuchstabe "u:" nicht
schon genutzt wird, erfolgt die Anbindung eines individuellen Netzwerklaufwerks für den
angemeldeten Benutzer an diesen Laufwerksbuchstaben. Das "Home Directory" kann
dabei auch von einem Fremdsystem (z.B. UNIX über Samba-Service) angefordert
werden, wozu der Benutzernamen explizit übertragen werden muß. Weiterhin sorgt die
Option "/PERSISTENT:YES" des Net-Befehls dafür, daß beim nächsten Anmelden
des Benutzers auf der NT-Domäne das Home Directory wieder angebunden wird. Technisch
gesehen bewirkt die Persistent-Option den festen Eintrag des Home Directories in das
Profil des Benutzers.
- Der Skriptbereich mit der Sprungmarke ":END" gilt für alle Betriebssysteme.
Hier erfolgt die Anbindung von Netzwerklaufwerken ohne Benutzerkennung für allgemeine
Zwecke (z.B. ein Public Directory).
- Weiterhin können über den Call-Befehl zentral gehaltenen Erweiterungen des
Login-Skripts aufgerufen werden. Ohne den Call-Befehl sind aufgerufenen Skripts nicht
"reentrant", d.h. sie kehren nicht wieder an ihren Aufrufpunkt zurück. Daher
würde das Login-Skript nach dem ersten direkten Aufruf eines weiteren Skripts (ohne den
Call-Befehl) einfach stehen bleiben.
- Zuletzt kann über eine spezielle Zeile jedem Benutzer die Möglichkeit gegeben werden,
eigene Erweiterungen des Login-Skripts einzubinden. Hierfür wird ein Skript mit seinem
Benutzernamen bei Vorhandensein von seinem Home Directory gestartet.
-
- @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