Logo faq-o-matic.net
Logo faq-o-matic.net

Loginskripts und Active Directory

von veröffentlicht am19. Januar 2003, 11:35 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Active Directory, Administration, Gruppenrichtlinien   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 26. September 2013

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: C:\WINNT\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.

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.

Zur Problematik NT vs. 2000/XP sollte man bei dieser Gelegenheit mal auf die unterschiedliche Funktionalität von "net use" hinweisen (die sich im XP-Falle übrigens auch per GPO steuern lässt): Unter NT funktioniert "net use x: serversharefolder" nicht, bei den Nachfolgern schon – NT kann sich nur direkt mit der Freigabe verbinden, nicht mit einem Unterordner. Unter NT kann man sich aber mit subst behelfen: "subst x: \\server\share\folder" erreicht ein vergleichbares Ergebnis. Es wird aber im Explorer anders angezeigt als normale Mappings (und leider kann man auf einem subst-Laufwerk mit dem NT-Explorer keine Berechtigungen bearbeiten; mit cacls geht das aber).

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).
  • 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:

Anlegen und Testen des Skripts, Speichern an beliebigem Speicherort. Das Skript darf nicht im Unicode-Format gespeichert werden, sondern als ASCII- oder ANSI-Datei!

  1. Öffnen des Skript-Eintrags in der Gruppenrichtlinie, Doppelklick auf "Starten", "Herunterfahren", "Anmelden" oder "Abmelden".
  2. Klick auf den Button "Dateien anzeigen". Es öffnet sich ein Explorer-Fenster.
  3. In dieses Explorer-Fenster muss die unter 1. gespeicherte Datei kopiert werden. Das Ordnerfenster kann dann geschlossen werden.
  4. Über den Button "Hinzufügen" im Skript-Fenster den Dateinamen (ohne Pfad) des unter 4. kopierten Skripts angeben.
  5. 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 Zewck einfach durch das oben erwähnte Dateiauswahlfenster durchklicken. Ich 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"
  • außerdem darf unter "Benutzerkonfiguration / Administrative Vorlagen / System" 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 leider nicht mit Bordmitteln. Im Falle von NT und W2000 klappt es mit einem Zusatzprogramm (gettype.exe aus dem Resource Kit), das über Errorlevel abgefragt wird. Unter XP allerdings scheint dieser Befehl mitgeliefert zu sein und ganz andere Rückgabewerte zu produzieren als die ResKit-Variante. Damit ist der Weg faktisch versperrt, weil sich die Versionen nicht mehr eindeutig unterscheiden lassen.

Es geht aber auch anders:

@echo off
rem Alle Nicht-NTs:
if not "%OS%"=="Windows_NT" goto ende

rem NT4:
ver|find "NT">nul
if not errorlevel 1 goto KeinNT

:NT
echo Hier sind Befehle fuer Windows NT
echo z. B. ein Home-Mapping mit subst
goto ende

:KeinNT
echo Hier sind Befehle fuer Maschinen ohne NT
echo z. B. Mapping mit net use

:ende

Mehr zu diesem Thema auf Mark Heitbrinks Seite www.gruppenrichtlinien.de.

© 2005-2023 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!