friesima
Goto Top

Nur eine (auch getrennte!) RDP Session pro Rechner

Hallo Administrator.de-Forum,

erstmal möchte ich euch allen danken, weil ich hier beim Lesen schon oft Hilfe gefunden habe, und ohne euch wirklich etwas fehlen würde.

Bei meinem aktuellen Problem, komme ich aber trotz allen google Suchen nicht weiter.
Ich habe folgende Umgebung:
ein paar Dutzend Windows-7 Clients in 2008R2-Domäne.

Wir haben auch einige Laptop-User, die gelegentlich rechenintensive Aufgaben auf andere Rechner auslagern (ebenfalls Windows 7, Verbindung per RDP), damit haben sie folgende Vorteile:
-Sie haben mehr Ressourcen, sie müssen keine Workstation im Büro stehen haben, sie legen ihr Outlook nicht lahm, sie können ihren Laptop in eine Besprechung oder nach Hause nehmen (während die Workstation weiter arbeitet) ... alles ganz große Klasse.

Jetzt gibt es nur folgendes Problem: User1 verwendet PC1 per RDP, wenn er den Laptop aus dem Dock nimmt wird die RDP Session getrennt. Jetzt kommt User2 und meldet sich an PC1 an...
Resultierende Probleme: User1 kann nicht mehr zurück in seine Session solange User2 ihn blockiert, User2 muss mit nem Rechner leben, auf dem im Hintergrund irgendwelche rechenintensiven Prozesse ausgeführt werden.

Kann ich irgendwie verhindern, dass sich ein zweiter user an einem PC mit getrennter RDP Session anmeldet? Mit den mir bekannten GPO-Einstellungen komme ich nicht weiter, weil die nur bei aktiven Sitzungen greifen.

Mir ist bekannt, dass möglicherweise der PC bis zum Session-Timeout lahmgelegt wird, aber das wäre okay.

Ich hoffe, ich konnte die Fragestellung verdeutlichen?!
Vielen Dank und viele Grüße

Mathias

Content-Key: 251789

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

Printed on: April 23, 2024 at 21:04 o'clock

Member: emeriks
emeriks Oct 13, 2014 updated at 16:47:00 (UTC)
Goto Top
Hi,
ich würde mal sagen, dass kannst Du nur unterbinden, wenn Du den "Schnellen Benutzerwechsel" generell deaktivierst. Dann kann sich kein zweiter Benutzer anmelden, solange noch einer angemeldet ist. Außer Admins: Diese können gesperrte Benutzersitzungen trotzdem noch abmelden.

Siehe mal hier: http://www.addictivetips.com/windows-tips/how-to-enable-disable-fast-us ...

Hilft das?

E.
Member: DerWoWusste
DerWoWusste Oct 13, 2014 at 21:23:31 (UTC)
Goto Top
Hi.

Die Lösung ist http://technet.microsoft.com/en-us/library/cc784146(v=ws.10).aspx ->auf eins setzen. Gilt auch für win7.
Member: emeriks
emeriks Oct 14, 2014 at 06:52:58 (UTC)
Goto Top
@DerWoWusste
Und was ist, wenn sich ein Benutzer lokal anmeldet? Dann ist der Rechner doch auch für die Remote-Anmeldungen blockiert, weil Win7 doch nur einen aktiven Desktop gleichzeitig zulässt.

E.
Member: Friesima
Friesima Oct 14, 2014 at 07:12:43 (UTC)
Goto Top
Das korrespondiert bei Windows 7 vermutlich mit Computereinstellungen > Adm. Vorlagen > Windows-Komponenten > Remotedesktopdienste > RD-Sitzungs-Host > Verbindungen > Amzahl der Verbindungen einschränken ..

richtig? Das hatte ich schon auf 1 gestellt. Das verhindert nur dass User2 eine aktive Session von User1 killen kann. Sobald User1 seine Verbindung trennt kann User2 noch mit dazu.

Hier meine aktuelle Client-GPO:


Richtlinien
Administrative Vorlagen

System/Anmelden
Einstiegspunkte für die schnelle Benutzerumschaltung ausblenden Aktiviert

Windows-Komponenten/Remotedesktopdienste/Remotedesktopsitzungs-Host/Verbindungen
Anzahl der Verbindungen einschränken Aktiviert
Maximale Anzahl von Remotedesktopverbindungen 1


lokale Anmeldungen sind übrigens kein Problem, die Kisten stehen hinter Schloss und Riegel. face-wink
Member: DerWoWusste
DerWoWusste Oct 14, 2014 at 08:00:59 (UTC)
Goto Top
Das verhindert nur dass User2 eine aktive Session von User1 killen kann. Sobald User1 seine Verbindung trennt kann User2 noch mit dazu.
Dann sorg dafür, dass der Nutzer seine eigene Sitzung nicht trennt, sondern offen lässt und alles ist wie gewünscht. Klar, Du willst das nicht, aber so ist es, es geht nicht anders, außer Du arbeitest mit eigenen Skripten, die den Zweiten als Zweiten identifizieren und sofort wieder abmelden.
Member: Friesima
Friesima Oct 14, 2014 at 08:10:04 (UTC)
Goto Top
Zitat von @DerWoWusste:

Dann sorg dafür, dass der Nutzer seine eigene Sitzung nicht trennt, sondern offen lässt und alles ist wie
gewünscht.

Kann man das RDP-Fenster schließen ohne die Session zu trennen? Vermutlich nicht, oder? Also doch Skripte... Schade, ich hatte die Hoffnung, dass es mit Bordmitteln geht.
Member: Friesima
Friesima Oct 15, 2014 at 10:24:31 (UTC)
Goto Top
Also mein Skript sieht jetzt so aus:

set ende=0
REM Getrennte Session finden
for /f "skip=2 tokens=3" %%G in ('qwinsta^|find /i "Ge"') DO set ende=1  

if "%ende%" == "1" (  
REM SessionID rausbekommen
for /f "skip=1 tokens=3" %%H in ('qwinsta %sessionname% ') DO set SessID=%%H  
msg %SessID% /server:localhost /time:120 /w Dieser Computer ist gerade durch eine getrennte Session belegt. Sie werden in 120 Sekunden automatisch abgemeldet.
logoff %SessID%
)

Das funktioniert eigentlich wie benötigt.
wie ist es denn sinnvoll möglich, dieses Skript nur bei Anmeldung auf einzelnen Computern (dieser handvoll Workstations) auszuführen?
Member: DerWoWusste
Solution DerWoWusste Oct 15, 2014 updated at 15:08:27 (UTC)
Goto Top
Nimm den Taskplaner dafür, der kennt als Starttrigger "Bei der Anmeldung".
Member: Friesima
Friesima Oct 15, 2014 at 11:52:59 (UTC)
Goto Top
Ja, sehr gut... Jetzt kam als Ergebnis der Aufgabenausführung:

Die Aufgabenplanung konnte die Aufgabe "\Abmeldeskript ausführen" für den Benutzer "VORDEFINIERT\VORDEFINIERT" nicht starten. Zusätzliche Daten: Fehlerwert: 2147943645

darauf habe ich als Benutzerkonto statt %LogonDomain%\%LogonUser% (oder so) folgendes gesetzt: %userdomain%\%username%.

Jetzt versucht der Taskplaner den Task mit dem Computerkonto auszuführen, der Fehlerwert ist derselbe wie oben. Es ist unabhängig davon, ob das batch lokal oder im Netz liegt.

Wie kann ich die Aufgabe im Userkontext starten? Oder ist das nicht nötig?
Member: DerWoWusste
Solution DerWoWusste Oct 15, 2014 updated at 15:08:19 (UTC)
Goto Top
Auf keinen Fall im Userkontext, nimm System.
Im Userkontext würde bedeuten, dass jeder User das Recht "Anmeldung als Stapelverarbeitungsauftrag" bekommen müsste - vergiss es.

Schau also, was Du mit system machen kannst: Sitzungen mit qwinsta listen, suchen nach der eigenen (system), suchen nach getrennten, alles weitere trennen - zum Beispiel.
Member: Friesima
Friesima Oct 15, 2014 at 13:39:23 (UTC)
Goto Top
Nur eine Verständnisfrage warum nicht den User? Ist die genannte Berechtigung kritisch?

Ich habe jetzt System genommen, ich starte die Batch über den Aufruf von C:\Windows\System32\cmd.exe /k c:\temp\batch.bat
Alles was passiert ist, dass auf dem Computer ein cmd Prozess gestartet wird. Von Aktivitäten des Batch files merkt man nix.
Das batch habe ich angepasst, um die richtige Session auszuloggen:

REM Getrennte Session finden
for /f "skip=2 tokens=1" %%G in ('qwinsta^|find /i "Ge"') DO set ende=1 & set user2=%%G  
if %ende% == 1 (

REM Session ID des aktiven Users rausbekommen
for /f "tokens=3" %%H in ('qwinsta^|find /i "Aktiv"') DO set SessID=%%H  
REM USername des aktiven Users rausbekommen
for /f "tokens=2" %%I in ('qwinsta^|find /i "Aktiv"') DO set user3=%%I  

REM Nachricht an aktiven user schicken
msg %user3% /server:localhost /time:120 /w Dieser Computer wird gerade von %user2% benutzt. Sie werden in 120 Sekunden automatisch abgemeldet.

REM aktiven user abmelden
logoff %SessID%
)

Leider passiert damit nichts. face-sad
Member: DerWoWusste
Solution DerWoWusste Oct 15, 2014 updated at 15:08:22 (UTC)
Goto Top
Ja, ist kritisch. Wie kritisch, muss jeder selbst sagen, ich würde es sicher nicht gutheißen.
Zum Skript: teste mal als system. Nimm psexec (free download von Microsoft) und starte eine cmd als system. Und zwar so: von einem elevated command prompt aus:
psexec -s -i cmd
->von dort dann Deine Batch aufrufen.
Member: Friesima
Friesima Oct 15, 2014 updated at 15:36:18 (UTC)
Goto Top
Okay psexec war ein phantastischer Tipp. Jetzt habe ich folgendes festgestllt: der code läuft bis Zeile 10 (siehe post oben) einwandfrei unter System. Die Variablen user3 und SessID werden wie gewünscht gesetzt.

beim Aufruf von Zeile 11 und 14 werden die Variablen aber nicht eingesetzt. Ulkigerweise: Lasse ich das Skript zweimal hintereinander laufen werden die Umgebungsvariablen richtig aufgelöst.

Ich habe jetzt probiert vor Zeile 10 einen 10-sekunden timout einzubauen, aber das hilft auch nicht. Es liegt also nicht an der Zeit.

edit:
ich habe das skript jetzt zweimal hintereinander in derselben batch stehen... Jetzt tut es zumindest mal im Command Window. Jetzt mal schauen, wie es aus der Aufgabenplanung heraus aussieht.

edit2:
und es läuft wie gewünscht... Jetzt ist Feierabend!


Vielen Dank für eure (Deine!) Hilfe!