Eigentlich war bzw. ist ein eigener Beitrag zu Remote Desktop Plus in der Mache. Bislang fand das Tool bereits im Beitrag Windows: RemoteApps für verschiedene Benutzer per Aufgabe automatisch starten und trennen – Der kurze Weg Erwähnung. Anbei nun eine (kurze) Info zur Möglichkeit das Tool via Kommandozeile und damit aus Skripten heraus steuern zu können.

Neben den bereits anderweitig beschriebenen Möglichkeit RDP-Sitzungen oder -RemoteApps automatisch starten zu lassen hat Remote Desktop Plus (kurz RDP+) noch die weiteren Vorteilen, das es eine recht umfangreiche Kommandozeile gibt. Hinzu kommen die Optionen sowohl ein Protokoll schreiben zu lassen als auch einen Rückgabewert zwecks weiterer Auswertung zu haben. Ein Beispiel:

rdp.exe /v:wts02 /u:Administrator /p:<Passwort> /batch /log:rdp.log /disconnect:15

Diese Anweisung verbindet automatisch den angegebennen Benutzer mit dem Terminalserver, das Ganze erfolgt als Skript (“/batch”), wird protokolliert /”log…” und nach 15 Sekunden wieder getrennt.

Das Log sieht beispielsweise so aus:

Date-Time;Local-Computer;Local-IP-Address;Windows-Version;Local-User;TS-Client-Name;TS-Client-IP-Address;Remote-Computer;Remote-Port;Remote-User;RDP-Version;RDC-Version;Password-Mode;Session-Type;Application
2019-03-19 04:15:02;SRV02;192.168.0.26;Microsoft Windows Server 2016 Standard;SRV02\Administrator;-;-;wts02;3389;WTS02\Administrator;7.0.1;10.0;Password;Normal;-

Man kann es also, dank CSV-Format, wunderbar in einer Tabellenkalkulation der Wahl auswerten, wie im Screenshot in LibreOffice’s Calc:

Das es sich um eine simple Text-Datei handelt, könnte man diese zudem mit weiteren Tools auswerten.

Das Name der Protokolldatei kann fest vorgegeben oder alternativ mit Variablen dynamisch erzeugt werden. Die Macher geben dazu folgendes auf ihrer Homepage an:

%s: Will be expanded to the server name you’re connecting to.
%u: Will be expanded to the username used to login to the remote computer.
%c: Will be expanded to the name of the local client computer. When starting RDP+ locally, this will be the same as %COMPUTERNAME%. When starting RDP+ from within a Terminal Server or Citrix session, %c will contain the computername of the originating client computer (i.e. %CLIENTNAME%).
%y: The 4-digit representation of the current year.
%m: The 2-digit representation of the current month.
%d: The 2-digit representation of the current day.

Example: rdp /log:%y%m%d-%s.log

Alternativ kann man mit dem Parameter “/eventlog” entsprechende Einträge in das Windows-Ereignisprotokoll schreiben lassen.

Rückgabewerte (Errorlevel, Exit Code) liefert RDP+ nur wenn der Parameter “/batch” gesetzt ist. Folgende Werte stehen zur Verfügung:

0: No errors.
1: General undefined error.
2: Specified connection file not found.
5: Target computer not in the list of allowed targets.
29: Cannot write to the log file.
30: Profile not found.
87: Invalid command line parameter or combination of command line parameters.
161: The format of the specified path is invalid (filename of the connection file, log file or command options file).
259: No responsive server found in the list (when using /lb).
2382: Invalid notation of the specified host name or IP address.
10060: Connection timed out to the specified server.
11001: Remote hostname not found.

Kurzum: Alles größer Null ist ungut.

Wichtig ist, das man RDP+ via “start” ausführt, da sonst wenn das Programm z.B. bei irgendetwas ewig hängen bleibt oder die Verbindung ohne Timeout aufgebaut wird, man sonst unter Umständen nie einen Rückgabewert erhält. Ein Beispiel (Auszug aus einem Skript):

rem Sicherheits-Massnahme, fuer den Fall das rdp.exe im Fehlerfall haengen bleibt

echo timeout /t 60 > temp01.cmd
echo taskkill /im rdp.exe /f >> temp01.cmd
echo taskkill /im mstsc.exe /f >> temp01.cmd
echo exit >> temp01.cmd

start temp01.cmd

rem RDP+ ausfuehren
start /wait rdp.exe /v:wts02 /u:Administrator /p:<Passwort> /batch /log:rdp.log /disconnect:15

if %errorlevel% gtr 0 (
set mail=true
echo Fehler bei der RDP-Verbindung - Rueckgabewert: %errorlevel% >> e-mail.txt
echo. >> e-mail.txt
if exist rdp.log type rdp.log >> e-mail.txt
echo. >> e-mail.txt
)

Es wird zunächst ein weiteres Skript erstellt und gestartet (“temp01.cmd”). Dieses hat die Aufgabe RDP+ und den abhängigen Mstsc zu beenden, falls beides länger als 60 Sekunden läuft.

Dann wird RDP+ gestartet, die Verbindung nach 15 Sekunden beendet und der Rückgabewert ausgewertet.

Auf diese Art lässt sich automatisiert die RDP-Verbindung testen und ggf. im Fehlerfall z.B. eine Alarmierung und weitere Massnahmen auslösen.