Stand: 21.12.2000
Labs/Willmann
ACHTUNG: Lesen Sie den folgenden Text komplett, bevor Sie diese Strategie anwenden !
Das Problem: Oft ist es nötig, gewisse Steuerungen im Netzwerk von der Knotenadresse (MAC-Adresse) einer bestimmten Arbeitsstation abhängig zu machen. Beispiele hierfür sind:
Derartige Aufgaben werden meist mit verschiedenen Batchjobs oder auch teils in Login-Scripten erledigt. Dazu war es bisher nötig, jeweils eine längere Liste von Knotenadressen zu betrachten und je nach Adresse bestimmte Aktionen auszulösen. Z.B:
in einem Login-Script:
IF P_STATION="00001B0350F5" THEN MAP U:=USR:WUSER\WDX1
IF P_STATION="00001B3F944A" THEN MAP U:=USR:WUSER\WDX5
....
in einem Batch-Job:
if "%pstation%"=="00001B0350F5" nprinter inf 0
if "%pstation%"=="00001B033454" nprinter inf 1
...
Der schwerwiegende Nachteil dabei war, daß überall die Knotenadressen standen, so dass bei einem Netzkartenwechsel alle Scripten und Batch-Jobs geändert werden mußten !!!
Die Lösung: (Stichwort: Single point of administration)
Viel besser wäre es jedoch, wenn obige Anweisung z.B. vom Rechnernamen oder vom Raum, usw... abhängig wären. Z.B. in folgender Form:
in einem Login-Script:
REM Mapping mit Hilfe von Environment-Variablen
MAP INS S6:=USR:WUSER\%<COMPUTER>
in einem Batch-Job:
if not "%computer%"=="C1-1" nprinter inf 0
Aber wie kommen die nötigen Angaben in das Environment ? Und wo kommen sie überhaupt her ?
Dazu haben wir die Syntax der BOOTCONF.SYS folgendermaßen erweitert:
Hinter dem Namen des Bootimage-Files folgt ein Leerzeichen und dann ein Semikolon. Dahinter folgen nun spezielle Eintragungen, die gar nicht oder teilweise oder vollständig vorhanden sein dürfen. Kommentare sind ebenfalls erlaubt. Das Format sieht also so aus:
Netz-Segment, Knotenadresse ; R=Raum, P=Nummer, Q=Schlange, N=Name, I=ip,
E=text {Rest egal}
z.B.:
0x2,00001B3B8561=BOOT.SYS ; R=C1, P=2, Q=laser,r N=C1-05, I=192.168.159.25, F=IMG.GHO, E=beliebig
Dabei bedeutet:
(Bem: Wer noch keine festplattenlosen Arbeitsstationen über das Netz gebootet hat, kennt die BOOTCONF.SYS vielleicht gar nicht. Lesen Sie im Novell-Netware-Handbuch nach. In dieser Datei steht zeilenweise für jeden fernzubootenden Rechner die Netzadresse, die Knotenadresse und der Name des Bootimage-Files, z.B:
0x2,00001B3B8561=BOOT.SYS
0x1,00001B3B8345=BOOT1.SYS
...
Eintragungen am Ende jeder solchen Zeile werden beim Booten nicht wahrgenommen. Dort können also z.B. Kommentare stehen, wie oben in der 2. Zeile angedeutet.)
Tragen Sie also für jede Arbeitsstation die entsprechenden Daten pro Zeile ein. Benutzen Sie dazu die Datei BOOTCONF.SYS. Arbeitsstationen, die gar nicht fernbooten, erhalten einen Bootimage-Filenamen, den es gar nicht gibt, z.B:
0x2,00001B3B8561=DUMMY.SYS
Sie dürfen auch eine andere Datei statt BOOTCONF.SYS anlegen.
Alle Aufgaben, die LOGINFO erledigt, hängen von der Knotenadresse (der sogenannten MAC-Adresse) der gerade benutzten Arbeitsstation ab. Also muss folglich LOGINFO diese MAC-Adresse kennen. Dafür stehen zwei Möglichleiten zur Verfügung.
/mac
oder
/macenv
./mac
liesst nur die MAC-Adresse, /macenv
schreibt
sie ausserdem noch ins Environment.)
SET PSTATION="%P_STATION"
/mac
oder /macenv
benötigt
LOGINFO diese Environment-Variable !
LOGINFO läßt sich auf verschiedene Weisen verwenden:
In jedem Fall geht es letztlich um das Setzen der Environment-Variablen:
/macenv
)
Die genaue Syntax ist:
Aufruf: loginfo {optionen} (dann wird F:\LOGIN\BOOTCONF.SYS benutzt) loginfo pfad\datei {opt} (dann wird die spezifizierte Datei benutzt) loginfo ... $pfad{datei} (Batchjob wird erzeugt) loginfo ... !pfad{Datei} (Loginscript wird erzeugt) Optionen: /w Wartet nach Programmausfhrung, bis ENTER-TASTE gedrckt wird. /d Zeige Ergebnisse auf Bildschirm (Debug). (Ev. /W einschalten). /g Zeigt alle Meldungen in deutsch. /mac Benutze MAC-Adresse statt PSTATION. (Ein Novell-Client /macenv MAC-Adresse ins Environment. muss geladen sein) /nofile Werte keine BOOTCONF-Datei aus. (Kombiniere zB. mit macenv) Output: die genannten Environment-Variablen und als DOSExitCode: 0 erfolgreich >=1 Fehler: 1 : PSP von COMMAND nicht gefunden 2 : Kennung 4Dh nicht gefunden 3 : Master-Environment nicht gefunden 4 : Master-Environment ist voll 5 : Environment nicht gesetzt 6 : unbekannte /Option 7 : / vor Option fehlt 8 : Bootconf-Datei nicht gefunden
Das Programm LOGINFO liest die Environment-Variable PSTATION oder benutzt
direkt die MAC-Adresse und sucht dann in der BOOTCONF.SYS oder auf Wunsch
auch aus einer anderen Datei den gleichen Wert und gibt die gewünschten
Informationen als Environment-Variablen im Masterenvironment zurück.
(Als Spezialfall kann das Lesen der bootconf auch entfallen.)
ODER
erzeugt eine Batchdatei/Loginscript, die diese Environment-Variablen erzeugt:
Environment Datei x.bat x=letzte 8 Zeichen ----------- ----------- von pstation z.B: 12345678.bat ROOM Raumbezeichnung set ROOM= Raumbezeichnung PRINTER Druckernummer set PRINTER=Druckernummer QUEUE Druckerschlange set QUEUE=Druckerschlange COMPUTER Computername set COMPUTER=Computername IP IP-Adresse set IP=IP-Adresse FI Festplatten-Image set FI=Festplatten-Image EXTRA optional und frei verfuegbar set EXTRA=Text (PSTATION MAC-Adresse set PSTATION=MAC-Adresse PSTATION8 MAC-Adr. auf 8 Stellen set PSTATION8=gekürzte MAC-Adresse)
gekürzt.
x=letzte 8 Zeichen von pstation oder vorgegebener Name statt x.bat inclusive Pfad
(siehe auch PRINTNO.EXE/DOC und SetMEnv.EXE/DOC im Text printno.htm und setmenv.htm)
Starten Sie loginfo /h, erhalten Sie eine Hilfe, die alle Optionen erklärt. Mit loginfo /h /g erhalten Sie dies in deutsch.
Bemerkungen:
Sinn und Zweck:
Beim Login sollen in der Regel diverse Dinge gesetzt und ausgefuehrt werden. So kann LOGINFO in einem dem Loginscript nachgeschalteten Batch-Job aufgerufen werden. Die dabei gesetzten Environment-Variablen können dann noch im gleichen Batch-Job benutzt werden.
WARNUNG: Während des Loginscript kann (wohl?) nicht durch ein externes
Programm das Master-Environment geändert werden.
Deshalb DARF LOGINFO NICHT dort einsetzt werden, ohne die !-Pfad\Datei-Option
einzusetzen !
(Die !-Dateiangabe erzeugt ein neues LOGIN-Script nur mit SET- Parametern,
dass gleich per Include aufgerufen werden kann. Damit laesst sich dann doch
das Master-Environment setzen !)
Anwendungsbeispiele:
- Vieles ausserhalb vom Loginscript erledigen: ------------------------------------------- Beenden Sie das (letzte) Loginscipt mit dem Aufruf einer Batch-Datei, z.B.: ... pccompatible exit "f:\login\start" Innerhalb von f:\login\start.bat benutzen Sie LOGINFO. - Sie wollen waehrend des Login gewisse Verzeichnisse (z.B. fuer temporaere Windowsverzeichnisse) in Abhaengigkeit vom Computernamen mappen. Sagen wir die Computer heissen C-1, C-2,... und die Verzeichnisse g:\wuser\c-1, g:\wuser\c-2,... Setzen Sie dann z.B. im Start-Batch: MAP U:=USR:WUSER\%COMPUTER% - Sie wollen in Abhaengigkeit von bestimmten Druckern, bestimmte Druckerschlangen setzen. Setzen Sie dazu in BOOTCONF.SYS den P-Wert jeweils auf eine Raumnummer. IF "%PRINTER%"=="1" F:\SYSALLE\CAPTURE Ti=1 NB NFF NT Q=necp7 IF "%PRINTER%"=="2" F:\SYSALLE\CAPTURE Ti=1 NB NFF NT Q=laser1 Oder sogar mit Hilfe des Q-Wertes: IF NOT "%QUEUE%"=="" F:\SYSALLE\CAPTURE Ti=1 NB NFF NT Q=%QUEUE% Und hier kommt der Clou: - Wenn Sie mit LOGINFO eine Batch-Datei erzeugen, so sollte das Verzeichnis, in dem Sie das tun, fuer den jeweiligen Benutzer Schreib- und Leserechte haben. Z.B.: loginfo $G:\ALLE Der Dateiname des erzeugten Batch-Jobs wird aus den letzen 8 Zeichen der Environment-Variablen PSTATION erzeugt. Wenn z.B. PSTATION=00001B3B8561 ist, und die BOOTCONF.SYS dazu die Zeile 0x1,00001B3B8345=BOOT.SYS ; R=C1, Q=deskjet, P=1, I=192.168.159.22 enthaelt, so wird 1B3B8345.BAT erzeugt. Der Inhalt koennte etwa so aussehen: @ECHO OFF REM Von LOGINFO.EXE automatisch erzeugte Batch-Datei SET ROOM=C1 SET PRINTER=1 SET QUEUE=deskjet SET COMPUTER= SET IP=192.168.159.22 SET FI=IMG.GHO SET EXTRA= Diesen Batchjob koennen Sie in der Datei START.BAT verwenden. Dazu sollten Sie allerdings zuvor im Login-Script die Environment- Variable PSTATION8 erzeugen, die die letzten 8 Zeichen von PSTATION enthaelt: SET PSTATION8="%PSTATION" <<4 (im Login-Script !)
(es geht wirklich so !!!) (Alternativ erzeugt auch die Option /macenv die Environment-Variablen PSTATION und PSTATION8.) In START.BAT rufen Sie dann den von LOGINFO erzeugten Batchjob folgendermassen auf: IF exist %PSTATION8%.BAT %PSTATION8%.BAT Danach sind die Environment-Variablen gesetzt, und Sie koennen diese wie oben beschrieben auswerten. - Stichwort: SELBSTHEILENDE ARBEITSSTATIONEN Sie wollen mit einem Festplatten-Image-Programm (Ghost, DriveImage,...) automatisch ueber Fernbooten eine Arbeitsstation restaurieren (clonen). Lassen Sie am Ende des Fernbootens zu einer Batch-Datei, z.B. f:\login\image.bat, verzweigen. Rufen Sie dort vor dem Aufruf vom Image-Programm dieses Programm loginfo auf. Jetzt steht Ihnen die Environment-Variable FI zur Verfuegung. Sie wissen also, welche Image-Datei fuer das Clonen verwendet werden soll. Fuer z.B. Ghost, wuerde jetzt der Aufruf so aussehen koennen: f:\ghost -clone,mode=load,src=f:\%fi%,dst=1 -sure TIP: Wenn man sich fuer das Restaurieren von Arbeitsstationen NICHT einloggen will, so kann LOGINFO die Arbeitsstationsadresse auch direkt lesen (Option /mac liesst direkt die MAC-Netzwerk- kartenadresse. Option /macenv tut dasselbe und setzt sie ausserdem als PSTATION ins Master-Enviroment.) Beispiele: loginfo /mac liest direkt die Kartenadresse und wertet BOOTCONF.SYS aus und setzt die dort gefundenen Werte ins Environment loginfo /macenv /nofile liest direkt die Kartenadresse und setzt sie ins Environment (PSTATION und PSTATION8) OHNE eine Bootconf.sys auszuwerten. Noch besser: - Vieles innerhalb vom Loginscript erledigen: ------------------------------------------- Rufen Sie LOGINFO innerhalb des Haupt-Loginscripts auf und lassen Sie sich ein Unter-Loginscript erzeugen, das anschliessend per INCLUDE aufgerufen wird und die Environment-Variablen setzt. Diese koennen groesstenteils auch innerhalb des Haupt-Loginscripts ausgewertet werden. z.B.: #f:\login\loginfo !G:\ALLE INCLUDE G:\ALLE\<PSTATION8>.SCT ... dann z.B.: MAP U:\SYS:WUSER\<COMPUTER> IF <QUEUE><>"" THEN CAPTURE Ti=1 NB NFF NT Q=<QUEUE> - Wollen Sie ein Login unter Windows-NT-4-Workstation machen, so koennen Sie auch eine fest benannte Unter-Loginscriptdatei auf die lokale Festplatte legen. Z.B.: IF "%OS"="WINNT" THEN BEGIN #f:\login\loginfo !D:\TEMP\NTLOGIN.SCT INCLUDE D:\TEMP\NTLOGIN.SCT END - TIP: Im Loginscript ist %OS eine Netware-Variable. In Batchfiles ist %OS% eine Environment-Variable. Unter Windows-NT ist im 1. Fall %OS=WINNT, im 2. Fall %OS%=Windows_NT
ACHTUNG: Einige Anwendungsbeispiele finden sich in:
Login-Skript | Beispiel eines vollständigen Login-Skript mit vielen Tricks |
START.BAT | Beispiel einer Batchdatei, die nach einem Login-Skript ausgeführt werden könnte |
STARTPRN.BAT | Beispiel einer Steuerung von Druckern (Drucker starten: Drucken ist möglich) |
STOPPRN.BAT | Beispiel einer Steuerung von Druckern (Drucker stoppen: Drucken ist nicht möglich)) |
DELPRN.BAT | Beispiel einer Steuerung von Druckern (Druckerschlangeninhalt löschen) |
Wenn Sie das oben beschriebene Verfahren verstanden haben, sollten Sie sich noch zwei weitere Programme anschauen. PRINTNO, PQJOB und und SETMENV. Die ersten beiden lassen sich hervorragend für Druckersteuerungen einsetzen, so wie sie z.B. in den oben genannten Drucker-Batch-Jobs benutzt werden.
Die Programme LOGINFO, PRINTNO, PQJOB und SETMENV können Sie durch Anklicken herunterladen oder über die OSSOS-Homepage und dort Download..
(PRINTNO.EXE/DOC, PQJOB und SetMEnv.EXE/DOC im Text printno.htm, pqjob.htm und setmenv.htm)