Wer Windows-Terminalserver betreut, wird diese eventuell jede Nacht oder zumindest in regelmäßigen Abständen Neustarten wollen. Oft lassen jedoch Benutzer ihre Rechner auch über Nacht an oder es wird sogar Nachts an den Geräten gearbeitet. Daher bietet es sich für den 24-Stunden-Betrieb an, nur einen Teil der Farm neu zu starten, sodass die Benutzer direkt auf andere aktive Server ausweichen können.
Wenn man sicher gehen möchte, dass die Benutzer korrekt abgemeldet werden und die Profile zurückgeschrieben werden, bevor der Neustart durchgeführt wird, kann man sich mit einem Script helfen:
rem Anmeldungen an diesem Server deaktivieren
\\CONTOSO.MSFT\NETLOGON\psexec.exe \\ctx-xenappxx change logon /disable
rem Meldungen an die Benutzer senden
msg * /SERVER:ctx-xenappxx “Dieser Server wird in 10 Minuten neu gestartet. Bitte melden Sie sich sofort ab, da Sie ansonsten automatisch abgemeldet werden”
rem 5 Minuten warten
TIMEOUT /T 300 /NOBREAK
rem Meldungen an die Benutzer senden
msg * /SERVER:ctx-xenappxx “Dieser Server wird in 5 Minuten neu gestartet. Bitte melden Sie sich sofort ab, da Sie ansonsten automatisch abgemeldet werden”
rem 3 Minuten warten
TIMEOUT /T 180 /NOBREAK
rem Meldungen an die Benutzer senden
msg * /SERVER:ctx-xenappxx “Dieser Server wird in 2 Minuten neu gestartet. Bitte melden Sie sich sofort ab, da Sie ansonsten automatisch abgemeldet werden”
rem 2 Minuten warten
TIMEOUT /T 120 /NOBREAK
rem Alle Benutzer abmelden
\\CONTOSO.MSFT\NETLOGON\psexec.exe \\ctx-xenappxx c:\session_logoff.bat
rem Server neu starten
shutdown /r /m \\ctx-xenappxx /t 30 /c “Server wird jetzt neu gestartet!”
Zuerst wird das Anmelden an dem Server deaktiviert, damit der User sich abmelden kann und direkt wieder anmelden kann – aber dann auf einen Server kommt, der gerade nicht neu gestartet wird. Dann wird der User mehrmals über den anstehenden Neustart benachrichtigt und zum Schluss werden die offenen Sessions abgemeldet und der Server startet neu.
Achtung: Unbedingt daran denken, dass die Anmelden nach dem Neustart wieder aktiviert werden müssen (bin mir nicht sicher, ob dies automatisch passiert – hatte in meinem Fall keine Relevanz, da Provisioning verwendet wird und die Änderung nach dem Neustart eh verschwunden ist).
Auf jedem Terminalserver muss lokal die Datei c:\session_logoff.bat angelegt werden mit dem Inhalt:
query session >session.txt
for /f “skip=1 tokens=3,” %%i in (session.txt) DO logoff %%i
del session.txt
Hab es leider nicht geschafft den Inhalt direkt via pxexec aufzurufen. Und UNC-Pfade werden nicht unterstützt, sonst hätte ich es auch auf NETLOGON gepackt.
Weitere Infos vom Microsoft dazu: http://support.microsoft.com/kb/259436/en-us und http://support.microsoft.com/kb/320183/en-us