[Batch] Terminalsession beenden

exxe

Mitleser
Hallo Forengemeinde,

ich stehe hier vor einem Problem, das meine Kentnisse im Bereich Batch-Scripting etwas überschreitet.

Aufgabe:
Beenden einer Session am Terminalserver per Batch

Lösungsweg:
Aufruf über die Kommandozeile mit

Code:
logoff [session_id] /SERVER:servername
(das funktioniert bei bekannter Session-ID und manueller Eingabe auch wunderbar).

Problem:
Da die Session-ID erst mal nicht bekannt ist und sich auch jedesmal ändert, versuche ich diese auszulesen und sie per Script an die Stelle von [session_id] zu übergeben.

Folgenden Code habe ich mir bis hierhin zurechtgebastelt:

Code:
@ECHO OFF
ECHO Session suchen . . .
FOR /F "TOKENS=1,2* skip=1" %%a IN ('QUERY USER username /SERVER:servername') DO CALL :SessionKill %%a %%b %%c
GOTO :EOF

:SessionKill
echo Login: %1
echo Name: %2
echo ID: %3
QUERY USER %2 /SERVER:servername

Das funktioniert zur Überprüfung der übergebenen Werte soweit erst mal einwandfrei, die Ausgabe hierzu:


Code:
Session suchen . . .
Login: username
Name: ica-tcp#3
ID: 5
 BENUTZERNAME          SITZUNGSNAME       ID  STATUS  LEERLAUF   ANMELDEZEIT
 username              ica-tcp#3           5  Aktiv        1:59  13.02.2012 12:22


Hier beendet sich das Script und die Welt ist soweit in Ordnung.
Nun hab ich ja in obigem Beispiel die ID = %3 und kann doch eigentlich damit weiterarbeiten:

Code:
@ECHO OFF
ECHO Session suchen . . .
FOR /F "TOKENS=1,2* skip=1" %%a IN ('QUERY USER username /SERVER:servername') DO CALL :SessionKill %%a %%b %%c
GOTO :EOF

:SessionKill
echo Login: %1
echo Name: %2
echo ID: %3
LOGOFF %3 /SERVER:servername

Und hier fängt mein Problem an, die Ausgabe bei oben genanntem Code ist:

Code:
Session suchen . . .
Login: username
Name: ica-tcp#3
ID: 5

Login: 5
Name: /SERVER:servername
ID:

Login: /SERVER:servername
Name:
ID:

Login: /SERVER:servername
Name:
ID:

Login: /SERVER:servername
Name:
ID:
.
.
.


Das Script läuft hier endlos weiter und muss abgebrochen werden.
Des weiteren führt es die gewünschte Abmeldung nicht durch, die Sitzung ist weiterhin aktiv.

Leider habe ich von der Materie zu wenig Ahnung, als dass ich hier den Fehler finde, geschweige denn irgendwo einen Ansatz zur Fehlersuche habe.

Daher hoffe ich, dass mir hier jemand weiterhelfen kann.
 

exxe

Mitleser
Manchmal kann es so einfach sein, ich sag nur Wald und Bäume und so...

Die Zeile
Code:
LOGOFF %3 /SERVER:servername
soll die Datei logoff.exe im Windowsverzeichnis mit den entsprechenden Parametern aufrufen.

Blöd nur, wenn man die Batchdatei "logoff.bat" nennt. :rolleyes:

Einmal kurz die Batchdatei umbenannt und schon funktioniert alles so, wie es soll :D