Windows konfigurieren mit Umgebungsvariablen

Environment Variables / Umgebungs Variablen

Umgebungsvariablen sind globale Variablen des Betriebsystems. Sie ermöglichen die Abfrage existentieller System Informationen und Parameter. Zudem können wichtige und auch kritische System Parameter mithilfe dieser Variablen geändert werden.

Environment Variables

Umgebungsvariablen werden auch ‚Environment Variables‘ genannt. Windows verwaltet diese jeweils für den Computer und den User getrennt. Umgebungsvariablen stehen allen Windows Programmen zur Verfügung.

  Computer Variablen

Sie sind für den Computer und somit für alle angemeldeten Benutzer gültig.
Computer Variablen können nur von Administratoren geändert werden.

Bsp.: %COMPUTERNAME%
Der Computername ist für alle Benutzer derselbe.

  User Variablen

Diese sind nur für den aktuellen Benutzer gültig.
Benutzer Variablen kann auch der angemeldete Benutzer ändern.

Bsp.: %USERNAME%
Der Username gilt immer für den aktuell angemeldeten Benutzer.

Umgebungsvariablen via GUI ansehen und bearbeiten

Systemeigenschaften Erweitert Umgebungsvariablen

oder

rundll32.exe sysdm.cpl,EditEnvironmentVariables

Environment Variables

Hier können Sie die einzelnen Variablen ansehen, bearbeiten, löschen und auch neue hinzufügen. Jeweils getrennt für den aktuellen Benutzer oder den Computer.

Diese Variablen wirken permanent und global. Heisst, sie sind auch nach einem Neustart / Neuanmeldung verfügbar und können von allen Programmen verwendet werden. Daher: Vorsicht !

Umgebungsvariablen via Commandline ansehen und bearbeiten

Welche Umgebungsvariablen stehen zur Verfügung ?

Mit einem einfachen CMD Befehl: ’set‘ kann man sich eine Liste aller verfügbaren Variablen anzeigen lassen.

Diese Liste ist nur ein kleiner Ausschnitt der verfügbaren Variablen. Darunter befinden sich auch sehr kritische Variblen. Wer beispielsweise die ‚path‘ Variable vermurkst, riskiert dass Windows nicht mehr richtig funktioniert oder nicht mehr startet. Also Vorsicht !

Einzelne Variablen lassen sich in einer Commandline folgend anzeigen:

Der Inhalt einer Variable so:

Um Umgebungsvariablen anzulegen oder zu ändern spendiert uns Microsoft seit Windows Vista ein Commandline Tool: ’setx.exe‘. Mit diesem Tool können wir Umgebungsvariablen jeweils für den Computer oder für den Benutzer ändern.

Die Benutzer spezifische Variable konnte problemlos angelegt werden, die Computer spezifische hingegen nicht. Dies funktioniert nur mit administrativer Berechtigung.

 Microsoft: setx.exe

Dynamische Variablen

Die Commandline kennt zusätzlich auch dynamische Variablen.

Mit dem ’set‘ Befehl können wir alle definierten Variablen ansehen, aber auch dynamische Variablen anlegen. Diese gelten nur in der Commandline und deren Subprozesse, also Prozesse die von dieser Commandline erzeugt werden.

Dynamische Variablen werden nicht gespeichert und verschwinden alsbald die Commandline, und deren Subprozesse, beendet wird.

Zusätzlich stellt uns die Commandline auch Werte in dynamischen Variablen bereit.

Beispielsweise:

CD Aktuelles Verzeichnis
DATE Aktuelles Datum
TIME Aktuelle Uhrzeit
ERRORLEVEL Fehlercode / Rückgabewert des zuletzt ausgeführten Befehls
RANDOM Generierte Zufallszahl

Profi

Wie werden Umgebungsvariablen verwaltet ?

Environment

Jeder Windows Prozess verfügt über einen sogenannten PEB ( Process Environment Block ). Der PEB enthält Prozess Informationen wie z.B.: ImageFile, Commandline und den Environment Block, in dem alle Umgebungsvariablen gespeichert sind.

Der Commandline Befehl ’set‘ liest oder beschreibt den Environment Block des eigenen Prozesses, andere Prozesse bleiben unberührt. Wird über die Commandline jedoch ein neuer Prozess gestartet, so erbt dieser den bestehenden Environment Block. Geänderte Umgebungsvariablen werden dadurch ebenso in den neuen Prozess übernommen.

Änderung am eigenen Environment Block sind nicht nur in der Commandline, sondern auch in vielen Programmiersprachen möglich:

C++ SetEnvironmentVariable
C# Environment.SetEnvironmentVariable

Die Api Function ‚CreateProcess‘ erlaubt es auch einen neuen Environment Block: ‚lpEnvironment‘ anzugeben. Bei einer NULL wird der bestehende Environment Block lopiert.

Wie werden die Umgebungsvariablen gespeichert ?

Da Umgebungsvariablen auch einen Neustart überleben, muss Windows diese irgendwo abspeichern.

Gespeichert werden sie in der Registry, für Computer und User getrennt.

  User Variablen
Unter diesem Registry Key speichert Windows alle angelegten Umgebungsvariablen die den angemeldeten Benutzer betreffen. Da sie im CurrentUser abgelegt werden, kann jeder User per default diese Variablen ändern oder neue anlegen.

Zu diesen explizit definierten Variablen kreiert Windows auch noch volatile Umgebungsvariablen wie %USERNAME%, %USERPROFILE%, … diese werden unter folgendem Key abgelegt.

  Computer Variablen

Hier speichert Windows alle Umgebungsvariablen die für den Computer und somit auch für jeden angemeldeten Benutzer gelten. Hier braucht der Benutzer administrative Rechte, da sie in der LocalMachine abgelegt sind.

Wann liest Windows diese Variablen aus ?

Wird eine Variable in der Registry geändert, ist sie dann auch gleich verfügbar ?

Nein. Wird z.B.: eine neue Variable: %MYVAR% angelegt, so kann man diese mit dem ’set‘ Befehl nicht sehen, auch nicht wenn eine neue Commandline geöffnet wurde.

Windows liest die Variablen aus der Registry beim …

  • Computer Start

Der ‚Session Manager‘ ( smss.exe ) liest die Computer Variablen aus der Registry und definiert das Environment.

  • User Login

Die ‚User Init‘ ( userinit.exe ) liest die Benutzer Variablen aus der Registry und starten mit dem generierten Environment die Shell. Per default wird die explorer.exe gestartet.

  • Ändern einer Variable

Windows legt keinen Callback auf die betreffenden Registry Keys und bekommt daher auch keine Änderungen mit. Wird eine Variable geändert, so muss man das explizit mitteilen.

Mit diesem Broadcast werden alle Fenster darüber informiert, dass sich das Environment geändert hat. Daraufhin kann nun jedes Programm sein Environment updaten, was aber nicht jedes Programm macht.

Die Shell macht es glücklicherweise und daher sind die geänderten Variablen in neuen Prozessen verfügbar.

Immer auf dem Laufenden !
Liken Sie uns jetzt auf Facebook
Keinen Artikel verpassen !
Folgen Sie uns jetzt auf Twitter

Fanden Sie den Artikel interessant ? Dann empfehlen Sie ihn doch gleich weiter !

Sagen Sie uns Ihre Meinung !

Happy new year 2016 !
Happy New Year 2016 !
Google Tips
Die besten Google Tipps, Hacks, Games und Easter Eggs !
Registry Quiz
Sind Sie ein Windows Registry Experte ?
Coder Myths
14 hartnäckige Programmier(er) Mythen und Irrtümer
Password Sünden / Password Sins
13 gefährliche Passwort Sünden
Passwort Generator / password generator
Online Passwort Generator
Password Hacker
Passwort Hacker – Wie kommen Hacker an Ihre Passwörter ?
Leet
Leet – die Hacker Sprache
Spy++ Title
Windows Fenster Spionage mit Spy++
Registry Quiz
Sind Sie ein Windows Registry Experte ?
Title ProcMon
Prozess Monitor – Programmen auf die Finger geschaut !
Windows Construct
Fenster im Eigenbau !
Coder Myths
14 hartnäckige Programmier(er) Mythen und Irrtümer
Windows Construct
Fenster im Eigenbau !
Debug Messages
Programmierer Geflüster abhorchen
Registry timestamp / Registry Zeitstempel
Registry Keys haben einen Zeitstempel ?!
Title ProcMon
Prozess Monitor – Programmen auf die Finger geschaut !
WMI Code Creator
WMI Code Creator – WMI ganz komfortabel
Environment Variables / Umgebungs Variablen
Windows konfigurieren mit Umgebungsvariablen
Passwort Generator / password generator
Online Passwort Generator