Loginskripts und Active Directory
Verfasser: Nils Kaczenski
Quelle:
http://www.faq-o-matic.net/content/view/31/45/
(Minimal Textänderungen und Kommentare hinzugefügt)
Beispiele sind am Ende des Textes zu finden.
Typen von Anmeldeskripts
Active Directory unterstützt mehrere Typen von Anmeldeskripts und verwandten
ausführbaren Dateien. Dies sind folgende:
| - | Klassische Anmeldeskripts, die einem Benutzerkonto zugewiesen sind und im NETLOGON-Verzeichnis des Domänencontrollers liegen. |
| - | Logon-Skripts, die mit den Gruppenrichtlinien zugewiesen werden. |
| - | Logoff-Skripts, die mit den Gruppenrichtlinien zugewiesen werden. |
| - | Skripts, die beim Starten bzw. Herunterfahren des Computers ausgeführt werden. Diese werden ebenfalls über Gruppenrichtlinien zugewiesen. |
Klassische Anmeldeskripts (NETLOGON)
Genau wie Windows NT unterstützt auch Active Directory die Zuweisung von
Anmeldeskripts über die Eigenschaften des Benutzerkontos. Dabei wird nur die
Angabe eines Dateinamen erwartet. Der Speicherort des Skripts ist die
NETLOGON-Freigabe des Anmeldeservers.
Im Unterschied zu Windows NT 4.0 ist der Speicherpfad dieser Freigabe auf einem
Windows-2000-Domänencontroller das Sysvol-Verzeichnis (Standard:
%systemroot%\SYSVOL\sysvol\<Domänenname>\scripts).
Achtung: Dies ist in der Onlinehilfe nicht korrekt dargestellt!
Unter Windows 2000 können Anmeldeskripts klassische Batchdateien sein (*.bat,
*.cmd), aber auch WSH-Skripte (VBScript, Jscript usw.). Diese erweiterten
Möglichkeiten setzen allerdings auch auf Client-Seite Windows 2000 voraus, bzw.
benötigen den Windows Scripting Host (WSH) um diese Dateien auszuführen. Windows
9x und NT4 Clients bringen diese Option nicht von alleine mit.
Der WSH kann hier
heruntergeladen werden.
Weitere Einschränkungen bei Windows 9x: Es sollte dran gedacht werden, daß beim
Einsatz einer klassischen Stapelverarbeitungsdatei (*.bat, *.cmd), Windows 9x
nicht mit der Endung .CMD zurechtkommt, sondern nur die .BAT Endung kennt. Zudem
sind gerade bei den sehr gebräuchlichen NET-Befehlen die Optionen, die
NT4/W2K/XP unterstützen nicht in der net.exe von 9x integriert.
Da Active Directory über einen leistungsfähigen Replikationsmechanismus
verfügt, werden Logonskripts automatisch zwischen den Domänencontrollern
repliziert; ein manuelles Kopieren oder Konfigurieren der Replikation ist daher
nicht mehr notwendig.
Für Clients unter Windows NT 4.0 (bzw. Windows 9x/Me) ist diese Variante der
Anmeldeskripts die einzige anwendbare, weil diese Betriebssysteme keine
Gruppenrichtlinien ausführen können.
Skripts über die Gruppenrichtlinien
Als erweiterte (und empfohlene) Methode unterstützt Active Directory das
Zuweisen von Skripts über die Gruppenrichtlinien (GPO, Group Policy Object).
Diese Methode kann in größeren Umgebungen deutlich flexibler sein. Für folgende
Zwecke lassen sich Skripts zuweisen:
| - |
Start des Computers: Skripts werden in der Gruppenrichtlinie unter
"Computereinstellungen / Windows-Einstellungen /
Skripts (Start/Herunterfahren) / Starten" zugewiesen. Sie
werden ausgeführt, wenn der betreffende Computer startet (am Ende des
Bootvorgangs). Hier kann es zu kleinen Verwirrungen führen, da das Script bei Default Einstellung nicht sichtbar ausgeführt wird. Um Script sichtbar auszuführen ist weiter unten die passende Richtlinie angegeben. |
| - | Herunterfahren des Computers: Skripts werden in der Gruppenrichtlinie unter "Computereinstellungen / Windows-Einstellungen / Skripts (Start/Herunterfahren) / Herunterfahren" zugewiesen. Sie werden ausgeführt, wenn der betreffende Computer herunterfährt. |
| - | Anmeldung eines Benutzers: Skripts werden in der Gruppenrichtlinie unter "Benutzereinstellungen / Windows-Einstellungen / Skripts (Anmelden/Abmelden) / Anmelden" zugewiesen. Sie werden ausgeführt, nachdem das Benutzerprofil geladen wurde. |
| - | Abmeldung eines Benutzers: Skripts werden in der Gruppenrichtlinie unter "Benutzereinstellungen / Windows-Einstellungen / Skripts (Anmelden/Abmelden) / Abmelden" zugewiesen. Sie werden ausgeführt, wenn der Benutzer sich abmeldet. |
Im Normalfall muss folgende Methode zum Zuweisen der Skripts angewandt werden,
weil sonst die Skripts nicht ausgeführt werden:
| 1. | Anlegen und Testen des Skripts, Speichern an beliebigem Speicherort. Das Skript darf nicht im Unicode-Format gespeichert werden, sondern als ASCII- oder ANSI-Datei! |
| 2. | Öffnen des Skript-Eintrags in der Gruppenrichtlinie, Doppelklick auf "Starten", "Herunterfahren", "Anmelden" oder "Abmelden". |
| 3. | Klick auf den Button "Dateien anzeigen". Es öffnet sich ein Explorer-Fenster. |
| 4. | In dieses Explorer-Fenster muss die unter 1. gespeicherte Datei kopiert werden. Das Ordnerfenster kann dann geschlossen werden. |
| 5. | Über den Button "Hinzufügen" im Skript-Fenster den Dateinamen (ohne Pfad) des unter 4. kopierten Skripts angeben. |
| 6. | OK bestätigen. |
Wichtig ist, dass die Datei explizit in den dafür vorgesehenen Ordner kopiert
wurde (Punkt 4) und dass ihr Dateiname in der Gruppenrichtlinie angegeben wird
(Punkt 5). Die Skripts werden nicht automatisch in den Ordner kopiert, wenn man
einen anderen Pfad auswählt. Dem System ist es aber egal, ob das Skript vor
Bearbeitung der Policy oder erst hinterher dort hinkopiert wird; wichtig ist die
Anwesenheit des Skripts bei Ausführung der Policy.
Neue Methode!
Norbert Fehlauer hat in der Newsgroup auf ein anderes Verfahren hingewiesen, das
einen entscheidenden Vorteil hat. In diesem Fall werden auch die
GPO-Logonskripts in der NETLOGON-Freigabe der Domänencontroller abgelegt
(dadurch hat man exakt einen Speicherungs- und Bearbeitungsort!). Um die Skripts
nun so ins GPO einzubinden, dass sie auch funktionieren, wählt man folgenden
Kniff: Man wählt den Pfad "\\domain.local\sysvol\domain.local\scripts" (dabei
ist "domain.local" der DNS-Name der Domäne) und nicht
"\\domain.local\sysvol\domain.local\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\USER\Scripts"
(dabei gilt Entsprechendes). Man kann sich zu diesem Zweck einfach durch das
oben erwähnte Dateiauswahlfenster durchklicken. Ich (Nils Kaczenski) habe es
probiert: Es klappt tatsächlich (zumindest im Labor).
Kombination von NETLOGON- und GPO-Skripts
Wenn einem Benutzer in den Konteneigenschaften ein NETLOGON-Logon-Skript
zugewiesen wird und gleichzeitig über die GPOs ein Skript aktiv wird, werden
beide aufgerufen. Dabei scheint das NETLOGON-Skript stets eine Idee früher
aufgerufen zu werden, die Ausführung läuft dann aber parallel (d. h. Befehle aus
dem GPO-Skript werden schon ausgeführt, bevor das NETLOGON-Skript abgearbeitet
ist). Wann genau was passiert, ist daher nicht vorhersagbar (hängt von der
Zeitplanung des lokalen Systems ab). Skripts sollten also ggf. aufeinander
abgestimmt werden.
Kontenbezogene Skripte (NETLOGON) werden standardmäßig sichtbar, die aus dem GPO
standardmäßig unsichtbar ausgeführt. Das führt dazu, dass ein GPO-Skript, das
auf eine Eingabe wartet, unsichtbar wartet und ständig einen CMD-Prozess
offenhält. Die Sichtbarkeit sowie weitere Einstellungen kann man aber per GPO
für beide Typen steuern: Einstellungsmöglichkeiten in der Gruppenrichtlinie
unter:
| - | "Computerkonfiguration / Administrative Vorlagen / System / Anmeldung" |
| - | "Computerkonfiguration / Administrative Vorlagen / System / Gruppenrichtlinien" |
| - | "Benutzerkonfiguration / Administrative Vorlagen / System / Anmeldung/Abmeldung" |
Eine weitere interessante Option bietet:
| - | "Computerkonfiguration / Administrative Vorlagen / System / Scripts" |
| - | "Benutzerkonfiguration / Administrative Vorlagen / System / Scripts" |
| "AnmeldeScripts gleichzeitig ausführen" |
Die Computerkonfiguration hat bei dieser Richtlinien Vorrang, falls an beiden
Stelle eine Einstellung vorgenommen wurde. Bei der Aktivierung dieser Richtlinie
werden erst die Scripts komplett zu Ende ausgeführt, bevor die
Explorer-Schnittstelle gestartet wird. Dadurch kann gewährleistet werden, daß
bestimmte Abhängigkeiten und/oder Netzwerkressourcen zum Zeitpunkt des
Desktopaufbaus auf jeden Fall vorhanden sind.
Wichtig ist, unter "Benutzerkonfiguration / Administrative Vorlagen / System"
darf die Befehlszeilenaufforderung nicht abgeschaltet sein, weil sonst keine
Batchdateien ausgeführt werden können.
Will man für Benutzer NETLOGON-Skripts anwenden, wenn sie an einer NT-Station
arbeiten und für 2000/XP-Rechner bei denselben Usern die GPO-Technik nutzen, so
kann man das NETLOGON-Skript klassisch den Benutzern zuweisen und im Skript
selbst testen, welches System der Client ausführt. Ist es ein 2000- oder
XP-Rechner, so wird das Skript beendet. Das geht aber nur mit einem
Zusatzprogramm (gettype.exe aus dem Resource Kit), das über Errorlevel abgefragt
wird.
Anmeldescripte – Beispiele
---------------- Benutzer- / Gruppenabfrage, Zuweisung Drucker
-------------------
---------------- IP Adresse und Subnetz als Variable setzen -------------------
---------------- OU als Variable setzen -------------------