Task Frage

oliver-siewert

New Member
Hallo,

ich hab mal eine Frage und zwar würde ich gerne bei einem meiner Windowsserver folgendes einrichten.
Ich möchte, wenn man die Verbindung zum Terminaldienst trennt, das der Server autom. ein Prozess des Users killt.

Ist das möglich?


Danke im Vorraus
 
Wenn der User die Sitzung trennt, dann wird er nicht abgemeldet. ;)

@oliver:
Soll die Aktion ausgeführt werden, wenn sich der User trennt oder wenn er abgemeldet wird?
 
Da ist mir nichts bekannt.
Das schwierige ist, dass die Aktion am Terminalserver ausgeführt werden soll.
D.h. der Terminalserver muss (möglichst zeitnah) mitbekommen, wenn eine Terminalsession auf Status "getrennt" gesetzt wird.

Welcher Prozess soll den bei getrennten Sitzungen beendet werden?
Evtl. gibt es einen anderen Weg.
 
Ach, das is nen Programm, was selber geschrieben ist, und es nimmt halt viel cpu/ram wenn es noch an ist, es wird halt nur von den Usern benutzt, sie vergessen dann aber das beenden, und so lastet es den Server aus, und man merkt es eben.
 
Eine Lösung wäre, daß man einfach bei einem Disconnect automatisch die Terminalsession abmeldet. Das könnte man global in einem AD machen, aber auch lokal an jedem Terminalserver. :rolleyes:

Alternativ könnte man ein Script schreiben, welches man per Scheduled Task einfach alle paar Minuten aufruft.
Dieses Script erkennt, welche Sitzungen gerade getrennt sind und schaut in diesen Sitzungen, ob darin der Prozess xy läuft. Anhand der Prozess-ID kann man diesen Prozess dann mit pskill abschiessen.

Ein Beispiel Batch-Script:

Code:
@echo off
set lookfor=[B]wfshell.exe[/B]
for /f %%a in ('[COLOR="Blue"]query user[/COLOR] ^| find /i "Getr."') do (for /f "tokens=4,3 " %%i in ('[COLOR="Blue"]query process %%a[/COLOR] ^| find /i "%LOOKFOR%"') do [B]echo[/B] %%i)

Im Grunde ganz einfache Sache:
query user gibt eine aktuelle Liste der lokal angemeldeten Terminaluser aus. Diese Liste wird nach dem String "Getr." gefiltert. Das ganze in einer FOR-DO-Schleife gepackt und somit hat man eine Liste der Usersessions mit Status "Getrennt".

Mit diesem Ergebnis ruft man query process auf. Hier kann man wieder filtern und eine hübsche FOR-DO-Schleife rum.
Als Ergebnis hat man die PID's, welche man abschiessen möchte.

Du musst jetzt nur noch den Wert für LOOKFOR berichtigen und das letzte "echo" in "pskill" ändern.
Aber nichts kaputt machen. :eek: :cool:
 
so,

erstmal danke... ich hab das nun alles so gemacht wie du gesagt hast.
Anschließend hab ich mich mit einem andern User eingeloggt, den Prozess gestartet und mich dann wieder als Admin verbunden.
Dann hab ich im TaskMgr geschaut, [x] Prozesse aller user anzeigen.
So, dann hab ich den gesehen, habe das Script namens "test.bat" ausgeführt.
Leider ist der Prozess aber immer nochnicht gekillt. Mach ich was falsch?
Wenns dann funktioniert hätte, hätte ich es jede x Min per TaskSchleuder... durchlaufen lassen.
Windows ist nicht so mein Fall. :D
 
Bist du sicher, dass du einen Prozess "test.bat" gesehen hast? Normalerweise müsste der Prozess "cmd.exe" heissen. :confused:

Das Script zeigt dir wie gesagt nur die Prozess-ID des Users an.
Und auch nur, wenn die Sitzung des Users getrennt wurde.
 
Back
Top