Windows:Logoff before Reboot
Aus znilwiki
Es empfiehlt sich oft, die Terminalserver einer Umgebung regelmäßig neu zu starten. Viele merkwürdigkeiten oder andere Probleme lassen sich so auf einfachste Weise beheben. Die normalen Methoden zum Neustart haben aber den Nachteil, das die Benutzer nicht vorher abgemeldet sondern "abgeschossen" werden.
Mit nachfolgender Batchdatei kann zwar nicht der Verlust von noch eventuell geöffneten, aber nicht gespeicherten, Dateien verhindert werden. Aber es findet eine richtige Abmeldung und damit eine Sicherung des Profils statt:
FOR /F "usebackq tokens=3" %%i IN (`"query session | find /I "tcp#" "`) DO logoff %%i
Das ist doch mal eine kurze Batchdatei :-)
Im Einzelnen:
- wir fragen mit query session die angemeldeten Benutzer ab - auf getrennte Sizungen erscheinen hier.
- mit find /I "tcp#" greifen wir und dabei nur die Zeilen mit einer Remotdesktop Sitzung - funktioniert auch bei Citrix-Servern
- FOR /F "usebackq tokens=3"' ist unserer Schleife - für jede gefundene Zeile bitte einmal abarbeiten - und nur den 3 Wert des Ergenisses nehmen (Anmeldename)
- DO logoff %%i' und melden ihn ab
Das Script muss deshalb natürlich mit lokalen Administratorenrechten aufgerufen werden.
Hier noch mal die Orignal Batch Datei unserer JumpingProfiles Programmierer: (Bitte beachten das die Version nur ein echo zum Testen ausgibt, ggf. bitte ändern)
REM ---------------------------------------------------------------------- REM File: JPLogoffAllUsers.cmd REM ---------------------------------------------------------------------- REM Description: REM REM - logs off all RDP and ICA sessions REM (session name contains "tcp#", as in "ICA-tcp#1" or "RDP-tcp#2") REM REM ---------------------------------------------------------------------- REM Comments: REM REM - lists all sessions REM REM query session REM REM - finds all lines containing the string "tcp#" REM /I = case-insensitive REM (to match upper- and lowercase "tcp" and "TCP") REM REM find /I "tcp#" REM REM - iterates the result in a FOR loop REM /F "usebackq tokens=3," = use back quote / get 3rd token (column) REM REM FOR /F "usebackq tokens=3" %%i IN (`<search>`) REM REM - execute command for each match REM REM DO <cmd> %%i REM REM ---------------------------------------------------------------------- REM REM ToDo: replace "echo" by "logoff" REM REM ---------------------------------------------------------------------- FOR /F "usebackq tokens=3" %%i IN (`"query session | find /I "tcp#" "`) DO echo %%i REM ----------------------------------------------------------------------