15.22 Umgebungsvariable setzen
 
Es gibt verschiedene Möglichkeiten, Umgebungsvariablen zu setzen. Dabei muss zwischen Benutzervariablen und Systemvariablen unterschieden werden. Die bereits gesetzten Variablen sehen Sie, wenn Sie unter Windows XP in der Systemsteuerung System · Erweitert · Umgebungsvariablen wählen. Durch die Anmeldung an der Domäne kommen jedoch noch einige Variablen hinzu, deren Wert Sie sehen, wenn Sie in einer CMD-Box den Befehl set | more oder besser set > set.txt absetzen und die erzeugte Datei set.txt anschließend öffnen.
Melden Sie sich als Administrator am Windows-XP-Rechner an, öffnen Sie in der Systemsteuerung System · Erweitert · Umgebungsvariablen und erzeugen Sie eine Benutzer-Umgebungsvariable namens AdminVariable mit dem Wert VariableAdmin sowie eine Systemvariable namens SystemVariable mit dem Wert VariableSystem. Wenn Sie erneut eine CMD-Box öffnen und den Befehl set | more eingeben, werden beide Variablen angezeigt. Doch wo haben Sie sich im System verewigt? Starten Sie regedit.exe und suchen Sie nach VariableAdmin. Unter HKEY_CURRENT_USER\Environment werden Sie fündig. Wählen Sie Datei · Exportieren und geben Sie als Dateinamen userset1 ein.
Nun wählen Sie Bearbeiten · Suchen und geben als Suchbegriff VariableSystem ein. Dieses Mal landen Sie unter HKEY_LOCAL_MACHINE\System\ControlSet001\Control\Session Manager\Environment. Wählen Sie Bearbeiten · Weitersuchen, denn der wirklich für unsere Arbeit relevante Schlüssel ist HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment. Exportieren Sie diesen Key über den Befehl Datei · Exportieren unter dem Namen systemset1.
Starten Sie jetzt notepad.exe und öffnen Sie die Dateien userset1.reg und danach systemset1.reg. Damit die reg-Dateien angezeigt werden, müssen Sie im Feld Dateityp auf Alle Dateien umschalten. Sie finden in den erzeugten reg-Dateien nicht nur die von uns erzeugten Variablen, sondern auch andere Variablen wie TEMP, TMP, windir oder PATHEXT. Beachten Sie Folgendes:
|
Die mit den zu Windows 2000 oder Windows XP gehörenden Registry-Tools regedit.exe oder regedt32.exe per Export-Befehl erzeugten reg-Dateien haben die Überschrift »Windows Registry Editor Version 5.00«. |
|
Variablen unter Windows 2000 und Windows XP sind bezüglich Groß- und Kleinschreibung »casesensitive«. In Skripten müssen Sie bei Abfragen darauf achten. Bei If-Abfragen können Sie jedoch den Parameter /i eingeben, um das Problem in den Griff zu bekommen. Die möglichen Parameter des If-Befehls erhalten Sie, indem Sie eine CMD-Box öffnen und den Befehl if /? absetzen. Ein Beispiel dazu: |
if /i not "%HOMEDRIVE%"=="G:" echo Der Basisordner wurde nicht oder fehlerhaft gesetzt.
Sie haben nun verschiedene Möglichkeiten, Variablen zu setzen:
|
Sie können auf dem Windows-XP-Mustercomputer die Variablen über die Systemsteuerung verändern und neue Variablen definieren. Anschließend exportieren Sie mittels regedit.exe die betreffenden Registry-Werte, bearbeiten die erzeugte reg-Datei nach Ihren Wünschen und schließen die neuen SET-Werte über das Anmeldeskript mit dem Befehl regedit /s %LOGONSERVER%\netlogon\reg\XYZ.REG ein. |
|
Sie benutzen das Tool XSET aus dem Windows Server Resource Kit, das in der Hilfe ausführlich beschrieben ist. |
|
Sie benutzen ein Kix-Skript und dort die Kix-Befehle. |
Wenn Kix32 läuft, sind weitere Variablen aktiv, die es nach der Beendigung von Kix32 nicht mehr gibt. Sie können jedoch diese flüchtigen Variablen in permanente Variablen umwandeln. Testen Sie einmal das Kix-Skript variable.kix mit folgendem Inhalt.
; zusaetzliche Maschinenvariablen erzeugen:
$productname = ReadValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion","ProductName"
if $productname = "Microsoft Windows XP"
setm "productname=WindowsXP"
endif
if $productname = "Microsoft Windows 2000"
setm "productname=Windows2000"
endif
$CSDVersion = ReadValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion","CSDVersion"
if $CSDVersion = "Service Pack 1"
setm "servicepack=SP1"
endif
if $CSDVersion = "Service Pack 2"
setm "servicepack=SP2"
endif
Dieses Kix-Skript erzeugt die Maschinenvariablen productname und servicepack, die Sie an anderer Stelle des Anmeldeskripts abfragen können, um festzustellen, ob Windows XP oder Windows 2000 und welches Service Pack installiert ist. Das sind nützliche Informationen! Wenn z.B. ein neues Service Pack 3 erschienen ist, können Sie die neu generierte Maschinenvariable servicepack abfragen und automatisch das neue Service Pack installieren, wenn die Variable »servicepack« den Wert »SP2« enthält.
Im Rootverzeichnis des Windows-XP-Clients finden Sie die 0 Byte große Datei AUTOEXEC.BAT. Auch über diese Datei können Sie Variablen setzen. Übernehmen Sie zum Test folgende AUTOEXEC.BAT nach C:\ und starten Sie den Windows-XP-Computer neu.
@echo off
REM geänderte AUTOEXEC.BAT zur Demonstration von SET-Variablen
PATH C:\TEMP;C:\PROGRAMME
SET TEMP=C:\TEMP
SET TMP=C:\TEMP
Set ABCD=AbCd
Wenn Sie nach dem Neustart den Befehl set > c:\set.txt eingeben und die Datei set.txt öffnen, werden Sie feststellen, dass der Suchpfad PATH tatsächlich um C:\TEMP;C:\Programme erweitert wurde und auch die Variable ABCD nun existiert. Die Variablen TEMP und TMP wurden aber nicht aus der autoexec.bat beibehalten, sondern durch die Werte in der Registrierdatenbank überschrieben. Es ist nun denkbar, die Datei C:\Autoexec.bat über das Anmeldeskript auszutauschen. Vergessen Sie nicht, die autoexec.bat anschließend nach diesem Test wieder zu löschen. Beim nächsten Rechnerstart ist die PATH-Variable dann wieder die alte.
Betrachten wir nun das Tools pathman.exe aus dem Windows 2000 Server Resource Kit. Damit können Sie nicht nur den Suchpfad um weitere Verzeichnisse erweitern, sondern auch eine beliebige Zeichenfolge aus dem vorhandenen Suchpfad wieder löschen. Der Befehl \\s1\netlogon\util\pathman.exe /ru ;;z:\kkh\; m:\ingres\bin;;u:\programme\dbengines\sybase\dll;u:\programme\dbengines\Sybase\BIN durchkämmt den Suchpfad des Anwenders und löscht die angegebenen Pfade einschließlich leerer Pfade (zwei Semikolons hintereinander: ;;).
Der Befehl \\s1\netlogon\util\pathman.exe /\\s1\netlogon\util\pathman.exe /au u:\programme\dbengines\oracle\bin fügt hingegen den Pfad u:\programme\dbengines\oracle\bin an den benutzerbezogenen Suchpfad an. Dasselbe funktioniert für den Systemsuchpfad:
/as path[;path[;path ...]]
Adds the semicolon-separated paths to the system path
/au path[;path[;path ...]]
Adds the semicolon-separated paths to the user path
/rs path[;path[;path ...]]
Removes the semicolon-separated paths from the system path
/ru path[;path[;path ...]]
Removes the semicolon-separated paths from the user path
|