Wie der Zufall es so wollte, fand sich am Ende des Schreibens von Windows: RemoteApps für verschiedene Benutzer per Aufgabe automatisch starten und trennen – Der lange Weg eine simplerere Möglichkeit, das Vorhaben umzusetzen bzw. nun deutlich zu vereinfachen.

Umsonst waren die vorigen Bemühungen dennoch nicht, da z.B. das Thema mit der Aufgabenplanung nach wie vor relevant hat. Um es relativ kurz zu machen: Statt auf eigene AutoIt-Skripte zum Automatisieren der Remotedesktopverbindungsanmeldung zu setzen wird nun Remote Desktop Plus verwendet, ein Wrapper für die “mstsc.exe” von Windows.

Einer von vielen Vorteilen von Remote Desktop Plus ist die Möglichkeit, quasi alles über Befehle und Parameter steuern zu können, dies schließt die Angabe von Benutzername und Kennwort mit ein. Also Bordmittel aufgebohrt, wenn man so möchte.

Vorbereitungen

Zunächst benötigt man die rdp.exe, die einfach heruntergeladen werden kann. Optional wird vom gleichen Anbieter Gencrypt zum Verschlüsseln des RDP-Kennworts benötigt. Ferner, wenn’s als Aufgabe erfolgreich laufen soll, wird Solway’s Task Scheduler benötigt. Zu guterletzt, damit man nach dem Trennen die Meldung automatisch loswird, wird noch die “ClickDiscRAWa.exe” bzw. “ClickDiscRAWa-x64.exe” aus dem Archiv RemoteApp_trennen_abmelden.zip benötigt.

Die Hintergründe zu dem wieso, weshalb und warum man diese Tools verwenden sollte, bitte in den zugehörigen Beiträgen nachlesen:

Windows: RemoteApps trennen (betrifft ClickDiscRAWa.exe)

Windows: RemoteApps für verschiedene Benutzer per Aufgabe automatisch starten und trennen – Der lange Weg

Windows: Alternativen zur Aufgabenplanung

Damit das nachfolgende Skript noch kompakter ist, wurde das Trennen der RDP-Sitzung ebenfalls als RemoteApp hinterlegt. Dazu reicht es aus, schlicht “tsdiscon” als RemoteApp z.B. mit dem Namen “Trennen” freizugeben.

Der kurze Weg

So sieht das Batch-Skript für einen Benutzer aus:

@echo off

title RemoteApp(s) starten und die Sitzung trennen

rem Konfiguration

 set RDPServer=
 set RDPDomain=
 set RDPUsername=
 set EncryptedRDPPassword=

rem ---

rem RemoteApps starten

 rdp.exe Outlook.rdp /v:%RDPServer% /domain:%RDPDomain% /u:%RDPUsername% /pe:%EncryptedRDPPassword%
 rdp.exe Firefox.rdp /v:%RDPServer%
 rdp.exe "3CXPhone for Windows.rdp" /v:%RDPServer%
 rdp.exe JTL-Wawi.rdp /v:%RDPServer%
 
rem ---

rem Pause damit die RemoteApps vollstaendig laden/starten koennen

 timeout /t 60 /nobreak

rem ---

rem Trennen und/oder Abmelden

 rdp.exe /remoteapp:"||Trennen" /v:%RDPServer% /domain:%RDPDomain% /u:%RDPUsername% /pe:%EncryptedRDPPassword%
 REM start ClickDiscRAWa-x64.exe <- Siehe Update vom 15.11.2018
 timeout /t 60 /nobreak
 taskkill /im mstsc.exe /f

Diese Befehlszeilen kann man für jeden Benutzer wiederholen oder eigene Skripte pro Benutzer anlegen. Nur für die erste RemoteApp müssen Anmeldedaten angeben werden. Sobald eine Sitzung besteht und verbunden ist, werden alle nachfolgenden RemoteApps in eben dieser gestartet. Das klappt aber nur, wenn keine zu große Pause zwischen den RemoteApps liegt. Im Zweifelsfall bei jeder RemoteApp die Zugangsdaten mitgeben.

Statt der RDP-Verbindungsdateien können die RemoteApps auch direkt mit ihrem Namen angesprochen werden:

rdp.exe /v:%RDPServer% /remoteapp:"||Outlook" /domain:%RDPDomain% /u:%RDPUsername% /pe:%EncryptedRDPPassword%

Ein weiteres Umstellungsargument

Zusätzlich nimmt einem Remote Desktop Plus das “Vertrauen sie diesem Server/Zertifikat” ebenfalls ab. So das sich mit dieser Umstellung dieser Punkt als abgehakt betrachtet werden kann.

Troubleshooting

Kein Licht ohne Schatten, wobei es halb so schlimm ist: Beim Ausprobieren klappte manchmal das Anmelden nicht und es erscheint der “Windows-Sicherheit”-Anmeldedialog für die Remotedesktopverbindung. Der bisherigen Erfahrung nach ist das dann auf eine hängen gebliebene “mstsc.exe” zurückzuführen, die nach irgendeinem Fehlversuch im Hintergrund noch läuft. Diese einfach per Task-Manager oder

taskkill /im mstsc.exe /f

abschießen und schon läuft’s wieder.

Etwas unberechenbarer ist die Meldung nach dem Trennen der RemoteApps, wozu die “ClickDiscRAWa-x64.exe” zum automatischen Anklicken dient. Zum einen spielt die Reihenfolge im Skript eine Rolle, soll heißen:

  • Erst “rdp.exe…” ausführen, dann
  • “ClickDiscRAWa-x64.exe” starten

Andernfalls tauchen gleich mehrere RemoteApp-getrennt-Meldungen auf, die dann nicht mehr automatisch weggeklickt werden. Ferner kommt es vor, das überhaupt keine Meldung erscheint, was als Dauerzustand eigentlich ideal wäre, aber leider nicht so ist. Dann würde allerdings ewig die “ClickDiscRAWa-x64.exe” weiterlaufen bzw. bei jedem weiteren Durchlaufen des Skripts weitere Instanzen gestartet werden. Als kleinen workaround kann man diese nach einer kurzen Pause beenden:

...
start ClickDiscRAWa-x64.exe
timeout /t 5
taskkill /im start ClickDiscRAWa-x64.exe /f

Ebenfalls hilfreich ist eine Pause beim Benutzerwechsel, da es sonst zu Schwierigkeiten bei der Anmeldung kommen kann.

rdp.exe... für Benutzer A
timeout /t 60
rdp.exe... für Benutzer B

Schlussbemerkung

Ursprünglich hatte ich genau nach solch einer Lösung gesucht, aber seinerzeit nichts gefunden. Waren wohl die falschen Schlüsselwörter für die Suchmaschine 😉 So oder so waren beide Wege durchaus lehrreich und interessant. Remote Desktop Plus bietet aber noch weit mehr, als es hier für diesen einen Zweck verwendet wurde, reinschauen lohnt sich also.

Update 15.11.2018

Leider erwies sich “ClickDiscRAWa-x64.exe” nicht als zuverlässig in diesem Kontext. Von daher besser auf die Kombi aus “timeout” und “taskkill”-Lösung setzen. Das Skript wurde entsprechend geändert.