Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

RDP Windows 7 nur eine Session erlauben

Frage Microsoft Windows Userverwaltung

Mitglied: samstre

samstre (Level 1) - Jetzt verbinden

22.12.2011 um 17:58 Uhr, 5851 Aufrufe, 4 Kommentare

Bei Windows 7 (wahrscheinlich auch Vista) hat sich (so wie es aussieht) das Sessionverhalten beim Login geändert. Früher unter Windows XP wurde, wenn sich ein User Angemeldet hat, ein anderer User (der bereits am System angemeldet war) abgemeldet. Sprich die Session wurde beendet und alle laufenden Programme des anderen Users wurden geschlossen.

Bei Windows 7 wird der User nicht abgemeldet. Seine Session wird nur inaktiv gesetzt (glaub ich zumindest). Programme des Users laufen weiter und in der Loginübersicht ist der Benutzer immer noch als "Angemeldet" gekennzeichnet.
Das ist zwar Logisch richtig und auch ein guter Schritt seitens Microsoft, allerdings bereitet genau dieser Umstand mir einige Probleme.

Folgendes Szenario:

Ich habe eine Windows7 Maschiene laufen, die im AD hängt. Die Maschiene wird Hauptsächlich von Entwicklern verwendet um sich per "Checkpoint Secure Client" in andere Netzte einzuwählen und per SSH ein Portforwarding aufzumachen. (vom Win7 Rechner auf irgendwelche Server).

Funktioniert alles wunderbar. Es gibt dabei nur ein Problem. Der Checkpoint Client ist etwas merkwürdig gebaut. Das GUI des Clients darf nur einmal ausgeführt werden (singleton). Das war bei den bisherigen XP-Rechnern überhaupt kein Problem. Ein User war angemeldet, ein 2. ist gekommen und hat ihn einfach rausgeschmissen. Nun geht das leider nichtmehr. Lustiger weise wird zwar die VPN-Verbindung getrennt, das GUI läuft allerdings weiter. Somit kann der neu angemeldete User sich nirgends einwählen. Leider kann ich nur besagten Secure Client verwenden. Somit muss ich irgendwie damit zurrecht kommen, dass von dem ding nur eine Instanz rennen darf.

Ich suche entweder eine Möglichkeit das Sessionverhalten von Windows XP unter Windows 7 zu aktivieren / umzuschalten (wenn möglich per GPO)
oder eine Möglichkeit beim Anmelden/wiederaufnehmen einer Session, einen Prozess eines anderen Users zu Killen. Ich habs schon mit einem taskkill batch script versucht, allerdings ohne erfolg.

Wär echt nett wenn mir irgendjemand weiterhelfen könnte.
Mitglied: YotYot
23.12.2011 um 08:03 Uhr
Moin!

Nur so auf die Schnelle, weil noch keiner geantwortet hat: Hab jetzt nur mal ganz knapp gesucht und daher wenigstens Dein Suchwort: es hat mit der Multi-User-Fähigkeit von Windows zu tun, die Möglichkeit der schnellen Benutzerumschaltung. In den GPO müsstest Du wahrscheinlich mal nach "Enable multiple logons per user" bzw. in der Gegend suchen. Da würde ich anfangen zu suchen.
Bitte warten ..
Mitglied: DerWoWusste
25.12.2011 um 18:16 Uhr
Moin.
Folgender Workaround wird helfen: erstelle einen geplanten Task, der als Startart (=Trigger) "bei der Benutzeranmeldung starten" hat. Dieser muss mit hohen Rechten laufen (z.B. Systemkonto ->System als Nutzer eintragen, kein Kennwort setzen, wird vom System eingesetzt). Der Task muss dann per Kommandozeile alle Usersitzungen auflisten und alle außer der eigenen töten. Wie Du das skriptest, überlasse ich mal Dir, aber es geht in jedem Fall. Wenn Du nicht klarkommst, melde Dich.
Bitte warten ..
Mitglied: samstre
28.12.2011 um 15:08 Uhr
Hi!

Erstmal danke für eure Kommentare. Leider war es mir nicht möglich das ganze per GPO zu lösen.

@DerWoWusste:
Ich habs dann mit deiner Idee versucht. War allerdings schwieriger als angenommen.
Ich hab mir einfach schnell 2 billig programmchen geschrieben (C#) die das ganze für mich erledigen.

Es gibt bei der ganze Sache 2 Probleme:
1. Wenn man einen Task als anderer User rennen lässt (RunAs) kriegt man aus den Sessiondaten blöderweise nur eben jenen User raus (System.Security.Principal.WindowsIdentity.GetCurrent()) der das Programm gerade ausführt. Das macht es natürlich schwierig alle anderen Sessions zu löschen, wenn man nicht weiß wer gerade aktiv ist.
2. Das ganze wäre "relativ schön" zu lösen wenn man sagen würde: Alle Ausloggen bis auf den Aktiven user. Leider wird der Task (mit Trigger "bei der Benutzeranmeldung starten") schon vor dem eigentlichen Login gestartet. Sprich: zu diesem Zeitpunkt ist (unter umständen) noch eine andere Session aktiv.

Ich bin dann einfach wie folgt an die Sache rangegangen:
1. Programm: Läuft als user und liest den benutzernamen aus und schreibt ihn in ein File. Da wirds dann lustig. Wo soll ich reinschreiben, damit der Admin das dann auch lesen kann + weiß wo es liegt... Ich habs einfach in den C:\Users\Public ordner geschrieben. (jaaa ist blöd weiß ich... wär cool wenn mir jemand einen besseren Platz dafür sagt. eventuell Registry???)
2. Programm: Läuft als Admin und liest den usernamen aus dem File und Logt alle anderen User aus und löscht am ende das File.

Ich benutze für die das logoff ding die cassia assembly (http://code.google.com/p/cassia/). Cool weil MIT-Licence.
Hier der Code meiner beiden Programme. Sollte jemand wissen, wie man sowas besser macht oder Verbesserungsvorschläge haben (ich bin nunmal einfach kein C# coder - siehe Schwerpunkt) ;)

Programm 1 (Run as User)
01.
using System; 
02.
using System.IO; 
03.
using System.Security.Principal; 
04.
using System.Diagnostics; 
05.
 
06.
namespace RunSessionKiller 
07.
08.
    class Program 
09.
10.
        static void Main(string[] args) 
11.
12.
            WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent(); 
13.
            string filename = "c:\\Users\\Public\\user" + DateTime.Now.ToString("yyyyMMddh"); 
14.
 
15.
            if (File.Exists(filename)) 
16.
                File.Delete(filename); 
17.
 
18.
            // Write the string to a file. 
19.
            System.IO.StreamWriter file = new System.IO.StreamWriter(filename); 
20.
            file.WriteLine(currentUser.Name); 
21.
            file.Close(); 
22.
23.
24.
}

Programm 2 (Run as Admin)
01.
using System; 
02.
using System.Security.Principal; 
03.
using System.Security.Permissions; 
04.
using System.IO; 
05.
using Cassia; 
06.
 
07.
namespace SessionKiller 
08.
09.
 
10.
    public class Program 
11.
12.
        public static void Main() 
13.
14.
            string filename = "c:\\Users\\Public\\user" + DateTime.Now.ToString("yyyyMMddh"); 
15.
            if (File.Exists(filename)) 
16.
17.
                StreamReader file = new StreamReader(filename); 
18.
                string username = file.ReadLine(); 
19.
                file.Close(); 
20.
 
21.
                if (username.Length > 0) 
22.
23.
                    ITerminalServicesManager manager = new TerminalServicesManager(); 
24.
                    ITerminalServer localhost = manager.GetLocalServer(); 
25.
                    WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent(); 
26.
                    foreach (ITerminalServicesSession session in localhost.GetSessions()) 
27.
28.
                        NTAccount account = session.UserAccount; 
29.
                        if (account != null) 
30.
31.
                            if (username.ToLower() != account.ToString().ToLower()) 
32.
33.
                                session.Logoff(); 
34.
35.
36.
37.
                    File.Delete(filename); 
38.
39.
40.
            else 
41.
42.
                System.Console.WriteLine("Could not read file: " + filename); 
43.
                System.Console.ReadKey(); 
44.
45.
46.
47.
}
LG
Bitte warten ..
Mitglied: samstre
28.12.2011 um 16:50 Uhr
Jetzt hab ich noch ein Problem. Wenn ich das ganze lokal am Computer als Task anlege (bzw. als 2 tasks die beim Anmelden erstellt werden) funktioniert es (die tasks werden beim anmelden brav ausgeführt).
Wenn ich dann das ganze per Gruppenrichtlinie machen will starten die Tasks nicht. Total komisch.

Und der Umweg über ein "copy /y \\SERVER\FREIGABE\task.job %windir%\tasks" ist ziemlich unschön (wie das ganze ding) ;)

Wieso startet der meine geplanten tasks nicht????
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Windows 10
gelöst Herunterfahren RDP Windows 10 verhindern (4)

Frage von micha055 zum Thema Windows 10 ...

Windows 10
gelöst RDP Verbindung zu Windows 10 Prof. mit Zertifikat sichern (2)

Frage von Windows11 zum Thema Windows 10 ...

LAN, WAN, Wireless
Keine RDP-Sitzung über VPN mit Windows 10 möglich (4)

Frage von Wonderland zum Thema LAN, WAN, Wireless ...

Windows 7
Windows 7 RDP-Port wird nicht abgehört (8)

Frage von cramtroni zum Thema Windows 7 ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...