Aktionen

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:

  1. wir fragen mit query session die angemeldeten Benutzer ab - auf getrennte Sizungen erscheinen hier.
  2. mit find /I "tcp#" greifen wir und dabei nur die Zeilen mit einer Remotdesktop Sitzung - funktioniert auch bei Citrix-Servern
  3. 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)
  4. 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)

Datei:JPLogoffAllUsers.cmd

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 ----------------------------------------------------------------------
Loading comments...