rdp-shadow.cmd – Kleines Skript zur schnelleren Remoteüberwachung von Terminalserver-Benutzern

Anbei ein kleines Skript, das unter Windows Server 2012 R2 oder Windows 8.1 (die als Terminalserver fungieren) einen schnelleren Zugriff auf die Remoteüberwachung ermöglicht.

Basierend auf den vorangegangenen Beitrag Remoteüberwachung von Terminalserver-Benutzern unter Windows Server 2012 R2 nun ein halbautomatisches Tool passend zum Thema.

Folgende Zeilen in eine Batch-Datei, z.B. mit dem Namen „rdp-shadow.cmd“, abspeichern:

@echo off

title Remoteueberwachung

rem Konfiguration

 set termserver=localhost

rem Session IDs auslesen

 echo.
 query session /server:%termserver%

rem Abfragen mit welcher Sitzung man sich verbinden moechte

 echo.
 set /p session-id=Session-ID oder q fuer Beenden eingeben und ENTER druecken: 
 
 if %session-id%==q exit
 
rem Remotedesktopverbindung aufbauen

 start mstsc /v:%termserver% /shadow:%session-id% /control

Die im Skript verwendeten Befehle ermöglichen nicht nur direkt am Terminalserver eine Remoteüberwachung, sondern auch von einem Client aus. Es muss lediglich die entsprechende Variable „termserver“ im Abschnitt „Konfiguration“ mit dem Computernamen oder der IP-Adresse des Terminalservers angepasst werden.

Windows: Remoteüberwachung mit rdp-shadow.cmd

Update 05.10.2018

Unter Windows 10 Pro (1803 getestet) klappt’s ebenfalls. Wichtig dabei ist, das man das Skript mit erhöhten Rechten startet, andernfalls kommt es zu einem „Zugriff verweigert“.

19 Kommentare

  • Danke für Deine tollen Tipps 🙂

    Ich habe die Position „set termserver=localhost“
    mit „set /p termserver=Remotedesktopserver:“ ausgetauscht.

    Damit wird das Script für mich noch etwas komfortabler.
    Man gibt einfach den gewünschten Server an.

  • wie froh war ich, als ich diesen Beitrag gefunden habe.
    Hab ich sofort ausprobiert auf einem Window10 „Server“ (rdp-wrapper).
    Leider klappts nicht. Es kommt die Meldung:
    „Spiegelungsfehler die Anforderung wurd vom Operator oder Administrator zurückgewiesen“

    Hat jemand eine Idee, wie diese Zurückweisung abgestellt werden kann?

  • wie wärs mit /noConsentPrompt?

  • „/noConsentPrompt Attempts to shadow without prompting the shadowee to grant permission.“

    Quelle: Windows 8.1 / Windows Server 2012 R2 – RDS Shadowing is back!

    Kann man anfügen (rechtliche Rahmenbedingungen allerdings beachten, je nach Unternehmen, Policy, etc.).

  • Habe diese Seite vor einigen Monaten entdeckt und dieses Skript war genau das was ich suchte.
    Es hat nicht nur mit meinen Terminalservern funktioniert sondern auch mit den Windows 10 Rechnern im Firmennetz nachdem ich dafür eine Zeile geändert habe auf
    set /p termserver=Rechnername:

    Seit etwa 3 Monaten funktioniert das Script nur noch bei den Terminalservern ( 2012 R2 )
    Bei den Windows 10 Rechnern kommt zwar das kleine RDP Fenster ( Verbindung wird hergestellt ) aber sobald der User seine Zustimmung erteilt und auf Ja klickt, verschwindet das kleine RDP Fenster und das Fenster mit der gespiegelten Sitzung kommt nicht. Im Task Manager ist noch für ein paar Sekunden der mstsc Task zu sehen und verschwindet dann auch.
    Scheinbar gab es bei Windows 10 ein Update welches das spiegeln unterbindet, denn wenn ich eine normale RDP-Sitzung auf diese Rechner starte, mich mit Namen und Kennwort verbinde, dann bekomme ich exklusiv den Zugriff auf die Sitzung und die Rechnerconsole wird gesperrt .
    Hat jemand eine Idee wie man das Skript wieder zum Laufen bringt?

  • Hallo Josef,

    welche Windows 10-Edition und -Version kommt zum Einsatz?
    Welche RDP Wrapper-Version wird verwendet?

  • Hallo Andy,

    ich habe 3 verschiedene Windows 10-Editionen auf den Rechnern.
    Die ich im 1. Halbjahr installiert aber noch nicht verteilt habe ( muss ca. 130 Win 7 ersetzen ) sind in Version
    1809 17763.864 termsrv.dll 10.0.17763.437

    Ausserdem noch 1903 18362.476 termsrv.dll 10.0.18362.267
    und aktuell 1909 18363.476 termsrv.dll 10.0.18362.267

    bei 1809 junktioniert das Skript, bei 1903 und 1909 nicht mehr

    Ich habe noch nie einen RDP Wrapper installiert, da die Rechner nur als Client für RDP 2012-R2 im Einsatz sind und auch nur ein Benutzer gleichzeitig auf dem Rechner angemeldet ist. Ich benutze dieses Skript um eine Remoteunterstützung für den User zu geben, wenn das Problem nicht in der Sitzung sondern auf dem Rechner ist.

  • Imho ist da irgendetwas unstimmig, denn versucht man sich an einem PC anzumelden, auf dem bereits ein anderer Benutzer angemeldet ist, ist keine weitere Anmeldung möglich. Per RDP erhält man die Meldung, das bereits ein Benutzer angemeldet ist und man bekommt (als Administrator) die Option, den angemeldeten Benutzer abzumelden um sich dann verbinden zu können.

    Anders ist die Situation wenn man RDP Wrapper, eine modifizierte termsrv.dll oder anderweitige Tools die aus einem Client-Windows einen Quasi-Terminalserver machen.

    Als Alternative für das geschilderten Szenario, sprich „Thin Client“-Support kann man Tools wie PCvisit, TeamViewer oder, wenns nur lokal oder via VPN ist, TightVNC verwenden.

  • Bis zur Windows Version 10 1809 hat dieses Skript funktioniert, die einzelnen Befehle dazu und was noch anzupassen war ist z.B. in diesem Beitrag beschrieben.

    https://www.windows-faq.de/2019/01/29/rdp-session-spiegeln/

    Da dieser Beitrag im Januar 2019 veröffentlicht wurde, war natürlich bis dahin nur Version 1809 bekannt.

    Ab 1903 funktioniert es nicht mehr – wie ich es oben schon beschrieben habe.

  • Unabhängig von Spiegelung (Shadow) war und ist es meiner Kenntnis und einem aktuellen Test nach immer noch so, das auf einem Client-Windows (XP, 7, 8.x, 10) keine zwei oder mehr gleichzeitigen RDP-Verbindungen auf eben dieses ab Werk möglich ist, man erhält bei dem Versuch dieses zu tun die im vorigen Kommentar erwähnte Meldung.

    Sicher das die Spiegelung auf dem Client und nicht doch auf dem WTS stattgefunden hat?

    Ansonsten das genaue Vorgehen beschreiben, damit man dieses reproduzieren kann.

  • Ich habe und will ja keine zwei oder mehr gleichzeitige RDP-Verbindung sondern nur die eine lokale Sitzung des Benutzers auf dem Windows 10 Rechner. Und diese eine lokale Sitzung kann ich ihm ja per RDP nehmen und er bekommt lokal einen Sperrbildschirm. So wie in dem von mir verlinkten Beitrag beschrieben, konnte man diese eine lokale Sitzung nicht nur nehmen sondern auch spiegeln. Allerdings nur bis 1809

  • Wie war denn bislang das exakte Vorgehen?
    Von wo aus wurde versucht zu spiegeln?

    Bei einem Test zwichen zwei Windows 10 Pro (1903) mit der Konfig. aus dem verlinkten Beitrag erhalte ich lediglich ein „Zugriff verweigert“.

  • Das „Zugriff verweigert“ konnte mit runas umgangen werden, es kommt schlicht darauf an, ob Domäne oder Arbeitsgruppe:

    runas /noprofile /netonly /user:domain-or-hostnameusername "mstsc /v:hostname-or-ip /shadow:id /control"

    Das beschriebene Verhalten konnte ich allerdings bislang nicht beobachten.
    Mit 1903 funktioniert es zumindest in meiner Testumgebung.

  • Mein Rechner Windows 10 1903 in unserer Domäne – mein Userprofil gehört zu den Domänen-Admins
    Ziel Rechner Windows 10 1809 in unserer Domäne – Userprofil Domänen-Benutzer Spiegelung funktioniert
    Ziel Rechner Windows 10 1903 in unserer Domäne – Userprofil Domänen-Benutzer keine Spiegelung

  • Müsste ich erstmal nachstellen, wie es sich zwischen zwei Domänen-PCs verhält.

    In der Testumgebung von einem Windows 10 Pro (1903, Arbeitsgruppe) auf einen Windows 10 Pro (1903, Domäne) klappt es.
    Auch von einem Windows Server 2019 zu einem Windows 10 Pro (1903) in der Testumgebung klappt es.

    Mal direkt mit dem Administrator-Konto versucht?

  • Habe es gerade als Administrator der Domäne auf einem Windows 10 Rechner und ebenfalls als Administrator auf einem 2012 R2 Terminalserver getestet. Leider immer das gleiche Ergebnis.
    Neuere Terminalserver habe ich nicht zur Verfügung.

  • Sehr seltsam. Da es bei mir auch in der Arbeitsgruppe funktioniert, sollte es nicht unbedingt an er Domäne liegen, außer es greift irgendeine GPO oder evtl. was an der Firewall.
    Ich gehe jetzt mal davon aus, das es auch nicht funktioniert wenn man die einzelnen Schritte des Skripts per Hand ausführt?
    Ist denn im Ereignisprotokoll auf beiden Seiten irgendetwas zu finden?

  • Problem gelöst.
    Im Ereignisprotokoll war nur unter Sicherheit ein Eintrag mit Überwachung gescheitert statt erfolgreich, aber das hat mich dann auf eine Idee gebracht.
    Ich habe bei den Clients bisher immer denn Haken weggelassen bei
    „Verbindung nur von Computers zulassen, auf denen Remotedesktop mit Authentifizierung auf Netzwerkebene ausgeführt wird“
    einfach um Kompatibilität auch mit nicht Windows Systemen zu behalten.
    Scheinbar fordert Microsoft jedoch bei Spiegelung der RDP-Sitzung diese Einstellung ab Windows 10 1903

    Eine Einstellung in den GPOs geändert und schon funktioniert es.

    Vielen Dank für die Mithilfe und Hinweise

    so sieht übrigens mein angepasstes Skript aus

    @echo off

    title Remoteueberwachung

    rem Konfiguration

    set /p termserver=Rechnername:

    rem Session IDs auslesen

    echo.
    query session /server:%termserver%

    rem Abfragen mit welcher Sitzung man sich verbinden moechte

    echo.
    set /p session-id=Session-ID oder q fuer Beenden eingeben und ENTER druecken:

    if %session-id%==q exit

    rem Remotedesktopverbindung aufbauen

    start mstsc /v:%termserver% /shadow:%session-id% /control

  • Danke für das Feedback und freut mich das es nun endlich (wieder) läuft.
    Interessante Sache, da haben wir alle wieder etwas dazugelernt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.