Aktionen

JumpingProfiles:StartenJPLogin

Aus znilwiki

JPLogin.exe stellt bei der Anmeldung den Inhalt des Benutzerteils der Registry wieder her - das was normalerweise in der NTUSER.DAT gespeichert würde. Damit alle Programme die auf die Registry zugreifen auch Ihre Werte finden muss der Start von JPLogin.exe so früh wie möglich während des Anmeldeprozesses erfolgen.
Für JPLogout.exe gilt das Gegenteil, dieses Programm soll bei der Abmeldung so spät wie möglich aufgerufen werden.


Windows Server 2000 / 2003 / 2003R2

Vorbereitung:

Setzen Sie unbedingt eine Gruppenrichtlinie auf die Terminalsever mit folgendem Inhalt:

  • Computerkonfiguration
    • Administrative Vorlagen
      • System/Skripts
        • Anmeldeskripts gleichzeitig ausführen: Aktiviert


Warum? Die Erklärung liefert uns unter anderem die Beschreibung der Gruppenrichtlinienoption:

Wartet bis die Anmeldeskripts zu Ende ausgeführt wurden, bevor 
das Windows Explorer-Schnittstellenprogramm gestartet und der Desktop erstellt wird.

Durch Aktivieren dieser Einstellung kann Windows Explorer erst gestartet werden, 
nachdem die Anmeldeskripts zu Ende ausgeführt wurden. Durch diese Einstellung
wird sicher gestellt, dass der Anmeldeskriptprozess fertig gestellt wurde, 
bevor der Benutzer anfängt den Computer zu verwenden.
Allerdings wird das Anzeigen des Desktops verzögert.

Dadurch ist sichergestellt, das jedes "Script" erst vollständig abgearbeitet wird bevor der Desktop oder eine andere Anwendung gestartet wird. Für uns Ideal - so hat JPLogin.exe auf jeden Fall seine Arbeit beendet bevor eine Anwendung auf die Registry zugreift.


Starten per Gruppenrichtlinie

Sie können den Benutzern oder den Terminalservern den Start von JumpingProfiles per Gruppenrichtlinie zuweisen:

Benutzer

Einfach als Start-Script einbinden:

  • Benutzerkonfiguration
    • Windows-Einstellungen
      • Skripts
        • Anmelden: \\Server\Freigabe\JumpingProfiles\JPLogin.exe


Computer

Wie wollen das das Script für jeden gestartet wird - und zwar soll es im Kontext des Benutzers laufen, nicht des Rechners:

  • Computerkonfiguration
    • System/Gruppenrichtlinien
      • Loopbackverarbeitungsmodus für Benutzergruppenrichtlinie: Aktiviert
Modus: Zusammenführen

Dadurch werden die Einstellungen im Bereich Benutzerkonfiguration aktiviert, obwohl die Richtlinie auf Computer, nicht auf Rechner angewendet wird.

Danach wie zuvor das Script in der Benutzerkonfiguration setzen:

  • Benutzerkonfiguration
    • Windows-Einstellungen
      • Skripts
        • Anmelden: \\Server\Freigabe\JumpingProfiles\JPLogin.exe

Starten per usrlogon.cmd

Auf jedem Server(!) ist die Datei usrlogon.cmd unter %SYSTEMROOT%\System32 zu finden, typischerweise also unter

C:\WINDOWS\system32\usrlogon.cmd

Öffnen Sie die Datei mit einem Editor wie z.B. Notepad und fügen Sie den Aufruf von JPLogin.exe einfach am Anfang ein:

@Echo Off

\\server\freigabe\JumpingProfiles\JPLogin.exe

Call "%SystemRoot%\Application Compatibility Scripts\SetPaths.Cmd"
If "%_SETPATHS%" == "FAIL" Goto Done

Rem
Rem Dies ist für Skripts, die RootDrive nicht benötigen.
...
...
...

Hierdurch wird JPLogin.exe zwar für alle Benutzer gestartet, auch z.B. den Administrator. JPLogin.exe prüft allerdings beim Start ob der Benutzer ein JP-Benutzer ist - und beendet sich gleich wieder sollte das nicht der Fall sein.
Nachteil ist natürlich, das im Gegensatz zur Gruppenrichtlinie diese Änderung auf jedem Terminalserver vorgenommen werden muss.


Starten per Registry

Auf Windows-Servern gibt es den Registry-Schlüssel und Wert

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
AppSetup REG_SZ

Auf normalen Servern ist der Wert normalerweise leer. Auf Terminalservern steht dort mindestens der Aufruf der usrlogon.cmd drin, ist zusätzlich Citrix installiert sogar noch mehr:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
AppSetup REG_SZ ctxhide.exe usrlogon.cmd,cmstart.exe

Wir tragen den Start von JPLogin.exe einfach dazu (Werte mit Komma trennen)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
AppSetup REG_SZ \\server\freigabe\JumpingProfiles\JPLogin.exe,ctxhide.exe usrlogon.cmd,cmstart.exe

Das war schon alles.

Wer das Automatisiert machen möchte, hier ein Script was ihr lokal auf den Servern als Computerrichtline oder z.B. per Altiris starten könnt. Es prüft vorher brav, ob der Pfad nicht schon drin steht und lässt es dann.

Media:Set JPLogin Start.cmd

@echo off
REM Start von JPLogin.exe über Registry einstellen
REM 2011 von Bernhard Linz, Bernhard.Linz@datagroup.de


REM Pfad von JPLogin.exe
Set JPPFAD=\\server\freigabe\JumpingProfiles\JPLogin.exe
Set SCHREIBWERT=


REM Teil 1: Vorhandenen Wert von AppSetup auslesen:
for /f "skip=2 tokens=* delims=:" %%i in ('reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AppSetup') do set ORIGINALWERTHELPER=%%i
Set ORIGINALWERT=%ORIGINALWERTHELPER:~26%
REM ECHO Original: -%ORIGINALWERT%-


REM Prüfen ob überhaupt etwas drin steht
if "%ORIGINALWERT%"=="" GoTo WertSchreiben


REM Prüfen ob wir nicht schon drin stehen:
:WertPruefen
REM in Teile Schneiden, Trennzeichen zwischen Einträgen ist das Komma
for /f "tokens=1-8* delims=," %%i in ("%ORIGINALWERT%") do Call :WertPruefen2 %%i %%j %%k %%l %%m %%n %%o %%p %%q
GoTo ENDE:


:WertPruefen2
REM wir prüfen einfach alle übergebenen Werte, bis zu 9 Stück.
REM auf Microsoft Terminalservern steht da ein Wert drin
REM ist Citrix installiert sind es 2
REM stehen wir schon drin sind es 3
REM macht noch 6 zur Sicherheit - muss reichen. Ich habs mit einer Batch einfach nicht eleganter hinbekommen.
if /i "%1"=="%JPPFAD%" GoTo ENDE
if /i "%2"=="%JPPFAD%" GoTo ENDE
if /i "%3"=="%JPPFAD%" GoTo ENDE
if /i "%4"=="%JPPFAD%" GoTo ENDE
if /i "%5"=="%JPPFAD%" GoTo ENDE
if /i "%6"=="%JPPFAD%" GoTo ENDE
if /i "%7"=="%JPPFAD%" GoTo ENDE
if /i "%8"=="%JPPFAD%" GoTo ENDE
if /i "%9"=="%JPPFAD%" GoTo ENDE
REM Keiner der vorhandenen Werte war unser Pfad! Also Setzen wir uns mit rein!
Set SCHREIBWERT=%JPPFAD%,%ORIGINALWERT%
echo Schreibwert: -%SCHREIBWERT%-
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v AppSetup /t REG_SZ /d "%SCHREIBWERT%"
GoTo :EOF

:WertSchreiben
REM Wenn der Wert Leer ist, ist es schon mal wahrscheinlich kein Terminalserver
REM Da müsste sonst zumindest der Aufruf der USRLOGON.CMD drin stehen, bei Citrix TS-Servern noch mehr 
REM Also machen wir am besten garnichts.
REM reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v AppSetup /t REG_SZ /d "%JPPFAD%"

:ENDE



Alternativ geht es auch wie hier beschrieben: JumpingProfiles:JPLogin.exe - Start der JPLogin.exe per Registry mit Skript auf Server verteilen


Windows Server 2008 / 2008 R2

Bei diesem Betriebssystem haben wir ein entscheidenes Problem:
Es gibt zwar noch den Punkt "Anmeldescripte gleichzeitig ausführen" in den Gruppenrichtlinien, er funktioniert jedoch nicht mehr. Hintergund: Wenn diese Einstellung per Gruppenrichtlinie gesetzt wird, so war es bisher so, das Windows mit dem Start der Benutzeroberfläche bzw. des ausgewählten Programmes solange gewartet hat bis alle Anmeldescripte fertig mit Ihrer Ausführung waren.
Aber egal ob die Richtlinie gestetzt ist oder nicht - Windows macht einfach weiter.

Unter Windows Server 2000/2003 hatte man deshalb noch freie Auswahl für den Start von JPLogin.exe, nun sollte man einen der beiden nachfolgenden Wege wählen:


Starten per usrlogon.cmd

Auf jedem Server(!) ist die Datei usrlogon.cmd unter %SYSTEMROOT%\System32 (32Bit Systeme) oder unter %SYSTEMROOT$\SysWOW64 (64Bit Systeme) zu finden, typischerweise also unter

 C:\WINDOWS\SysWOW64\usrlogon.cmd

bei einem Windows Server 2008 R2.

Öffnen Sie die Datei mit einem Editor wie z.B. Notepad und fügen Sie den Aufruf von JPLogin.exe einfach am Anfang ein:

@Echo Off

\\server\freigabe\JumpingProfiles\JPLogin.exe

Call "%SystemRoot%\Application Compatibility Scripts\SetPaths.Cmd"
If "%_SETPATHS%" == "FAIL" Goto Done

...
...

Hierdurch wird JPLogin.exe zwar für alle Benutzer gestartet, auch z.B. den Administrator. JPLogin.exe prüft allerdings beim Start ob der Benutzer ein JP-Benutzer ist - und beendet sich gleich wieder sollte das nicht der Fall sein.
Nachteil ist natürlich, das im Gegensatz zur Gruppenrichtlinie diese Änderung auf jedem Terminalserver vorgenommen werden muss.

Starten per Registry

Das Funktioniert 1:1 wie unter Windows Server 2000 / 2003 - der einfacher halber hier einmal wiederholt:

Auf den Windows-Servern gibt es den Registry-Schlüssel und Wert

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
AppSetup REG_SZ

Auf normalen Servern ist der Wert normalerweise leer. Auf Terminalservern steht dort mindestens der Aufruf der usrlogon.cmd drin, ist zusätzlich Citrix installiert sogar noch mehr:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
AppSetup REG_SZ ctxhide.exe usrlogon.cmd,cmstart.exe

Wir tragen den Start von JPLogin.exe einfach dazu (Werte mit Komma trennen)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
AppSetup REG_SZ \\server\freigabe\JumpingProfiles\JPLogin.exe,ctxhide.exe usrlogon.cmd,cmstart.exe

Das war schon alles.

Das Script für Windows Server 2000 / 2003 funktioniert ohne Änderungen genauso, für den Quelltext entweder herunterladen oder oben im Abschnitt für Windows Server 2000 / 2003 schauen.

Media:Set JPLogin Start.cmd

Kommentare

Loading comments...