zeroblue2005
Goto Top

Batch um Benutzer aus Sitzung abzumelden

Hallo Zusammen,

ich suche nach einer Lösung, wie ich auf einem Windows-Terminalserver 2008 R2 und 2012 R2 einem Benutzer da Recht geben kann einen anderen Benutzer Zwangsabzumelden! Hintergrund ist, dass auf den TS eine Anwendung läuft, die sich leider hin und wieder so aufhängt und einfriert, dass alles einfriert! Dann Hilft es nur noch dass ich dann über den Admin Oberfläche den Benutzer abmelde!

Der Benutzer hat zwar selbst einen Button auf dem Desktop, wo eine Batch mit shutdown /l /f hinter steckt, jedoch kommt er dann da nicht daran, wenn die Sitzung einfriert! Nun meine Überlegung, dass auf dem Nachbar Terminal-Client ein Button hinkommt mit einem Befehl die Benutzersitzung abzumelden.

Ja natürlich weiß ich, dass dies ein Krücke ist und auch gefahren dabei sind, jedoch bin ich hier von einem anderen Dienstleister abhängig, der das Problem erst mal in den Griff bekommen muss in der Software!

Wie ich eine Batch als Admin ausführe bzw. mit dem Adminkonto, stellt sich hier nicht als Problem da, eher die Syntax, ich denke an so was ca.:

shutdown -t 5 -IpDesTS -BenutzerZumAbmelden /l /f

Geht das überhaupt?

Danke

Content-Key: 332893

Url: https://administrator.de/contentid/332893

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: Kraemer
Kraemer 22.03.2017 um 12:57:36 Uhr
Goto Top
shutdown /?
Mitglied: 132692
132692 22.03.2017 aktualisiert um 13:00:44 Uhr
Goto Top
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 um 13:19:36 Uhr
Goto Top
shutdown /? bringt mich hier auch nicht weiter

Der verlinkte Beitrag bezieht sich auf ein anderes Fallbespiel und keine Ahnung wie wie ich das verwenden soll

logoff Gute Idee... ich versuche mal was
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 um 13:32:58 Uhr
Goto Top
OK! Also logoff ID oder Sitzungsname/server:name

Würde gehen, jedoch hat ja der Benutzer nicht immer die gleiche:

<SessionName>
oder
<SessionID>

Benutzername akzeptiert er nicht!

Die wechselt doch oder? Je nachdem welcher Benutzer sich zuerst anmeldet!
Mitglied: 132692
Lösung 132692 22.03.2017 aktualisiert um 13:48:04 Uhr
Goto Top
Lese sie mit FOR-Schleife aus QWINSTA oder query user aus , gibts hier im Forum schon Batchcode für, Suche benutzen ...
for /f "skip=1 tokens=2" %%a in ('query user maxmuster') do logoff "%%a"  
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 um 14:00:42 Uhr
Goto Top
Schau mal was hier gefunden habe! Könnte das nichts für mich sein?

@echo off
setlocal
:: SERVERNAME ANGEBEN!!!
set RDPSERVER=CITRIX2
:: Zum Abmelden von allen Sitzungen (auch Citrix) nur nach "#" suchen lassen!) 
set "SUCHESITZUNGSTYP=rdp-tcp#"  

echo !!!ACHTUNG! VORSICHT!!!
echo Alle Sitzungen vom Typ "%SUCHESITZUNGSTYP%" werden jetzt vom Server "%RDPSERVER%" abgemeldet!!!  
echo Zum Abbrechen STRG+C druecken!!
pause

For /F "usebackq tokens=1,2,3,4,5 delims= " %%i IN (`qwinsta /SERVER:%RDPSERVER% ^| find "%SUCHESITZUNGSTYP%"`) DO call :process %%k %%l %%m %%n %%o  
pause
goto eof

:process
@rem Die Sitzungsnummer steht immer 2 Spalten vor dem Connectiontyp
if "%5" EQU "rdpwd" set sitzungsnummer=%3  
if "%4" EQU "rdpwd" set sitzungsnummer=%2  
if "%3" EQU "rdpwd" set sitzungsnummer=%1  
@rem if "%sitzungsnummer%" NEQ "" echo %sitzungsnummer%  
if "%sitzungsnummer%" NEQ "" rwinsta %SITZUNGSNUMMER% /SERVER:%RDPSERVER%  
set SITZUNGSNUMMER=

Müsste man jetzt nur noch so anpassen! Das er autom. den richtigen Benutzer findet und dann Abmeldet
Mitglied: Kraemer
Kraemer 22.03.2017 um 14:05:04 Uhr
Goto Top
Zitat von @zeroblue2005:

shutdown /? bringt mich hier auch nicht weiter
das stimmt so nicht. Das hat dich in sofern weiter gebracht, als das du jetzt weißt, das sich /l und /m nicht kombinieren lassen und du mit dem Befehl auf dem Holzweg bist.

Ein kurzes "remote logoff" in Google eingegeben hätte dich dann zu einer Lösung gebracht.

Gruß Krämer
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 um 14:41:16 Uhr
Goto Top
Ja habe ich alles gefunden, bekomme es aber nicht hin die Befehle:

QUERY SESSION = Auslesen des Benutzers
Logoff oder RWinsta in einer Batch zu verknüpfen

Das das Ganze mit QUERY SESSION "Benutzer" anfängt ist klar, dann habe ich die ID und Sitzungnamen

Aber wie gehts dann weiter?

Wie übergeben ich den nun die ID an den Logoff Befehl?

So:
for /f "skip=1 tokens=2" %%a in ('query user maxmuster') do logoff "%%a"  

Ich blicke im Moment nicht mehr durch...
Mitglied: 132692
132692 22.03.2017 aktualisiert um 14:47:00 Uhr
Goto Top
Ich blicke im Moment nicht mehr durch...
Ist doch oben schon fertig (%%a) face-wink
%%a enthält den zweiten Token der Zeile (tokens=2) und das ist hier auf einem deutschen System der Sitzungsname.

Minimal mit der Kommandozeile sollte man sich schon beschäftigen, wenn man es hier schon auf dem Silbertablett bekommt!
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 um 15:56:02 Uhr
Goto Top
Ja verstehe ich schon, aber:

for /f "skip=1 tokens=2" %%a in ('query user maxmuster') do logoff "%%a"

Funktioniert nicht er sucht den User und findet ihn dann auch aber er meldet ihn nicht ab! %%a greift nicht!
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 um 16:36:56 Uhr
Goto Top
Vieleicht ist meine Erwartungshaltung auch die falsche!

Ich habe die Zeile in eine Test.bat kopiert, und ausgeführt!

Erwartet hätte ich jetzt, dass er durch die Schleife meinen gewünschten Benutzer identifiziert und dann mit logoff rauschmeisst. Die Batch wurde auf dem TS ausgeführt!
Mitglied: 132692
Lösung 132692 22.03.2017 aktualisiert um 18:41:04 Uhr
Goto Top
Zitat von @zeroblue2005:

Ja verstehe ich schon, aber:

for /f "skip=1 tokens=2" %%a in ('query user maxmuster') do logoff "%%a"

Funktioniert nicht er sucht den User und findet ihn dann auch aber er meldet ihn nicht ab! %%a greift nicht!
Was zeigt dir der Befehl query user <deinuserdendusuchst> in einer Konsole an? (Bitte hier rein pasten, aber bitte mit Codetags!)

Obiger Befehl geht hier testweise einwandfrei auf einem deutschen System. Kann sein das du bei dir ein anderes Token nehmen musst , je nachdem an welcher Stelle der Zeile bei dir der Sessionname steht.

Ich habe die Zeile in eine Test.bat kopiert, und ausgeführt!
Korrekt obige Zeile war für eine Batch gedacht (siehst du ja an den doppelten Prozentzeichen, für das Testen auf der Konsole müssen die natürlich durch einfache ersetzt werden!!).

aber er meldet ihn nicht ab!
Die Rechte müssen dem Account natürlich vorher erteilt worden sein.
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 um 19:21:10 Uhr
Goto Top
Hier die Ausgabe aus der Konsole:

C:\Users\administrator\Desktop>query user test.user
 BENUTZERNAME          SITZUNGSNAME       ID  STATUS  LEERLAUF   ANMELDEZEIT
 test.user                          rdp-tcp#1                    15  Aktiv           .                22.03.2017 19:08


C:\Users\administrator\Desktop>pause
Drücken Sie eine beliebige Taste . . .

Zum Test mache ich das über den Administrator, dass mit den Rechten sollte also passen.

Meine Batch sieht komplett so aus:

     query user test.user
pause
for /f "skip=1 tokens=2" %%a in ('query user test.user) do logoff "%%a"  
Mitglied: 132692
132692 22.03.2017 aktualisiert um 19:25:49 Uhr
Goto Top
Na dann, geht hier beides einwandfrei ob ich nun die ID wie hier im u.a. Skript verwende oder den Sitzungsnamen
for /f "skip=1 tokens=3" %%a in ('query user "test.user"') do logoff %%a  
Mitglied: zeroblue2005
zeroblue2005 22.03.2017 aktualisiert um 19:56:01 Uhr
Goto Top
Ich habe die Lösung. Die Batch muss mit ehöhten Adminrechten ausgeführt werden. Das war die Lösung. Oder wohl eher token 3

Danke