TeamViewer 10 unattended Install
TeamViewer 10 ist jetzt bereits eine Weile verfügbar, es war also mehr als überfällig das ich meine unattended scripts aktualisieren. Zumal einige Nutzer in den Kommentaren Fehler gemeldet hatten mit der alten Version. Dieses Mal übrigens getestet unter Windows 7 (x86, UAC deaktiviert) anstatt Windows XP. So here we go…
Es ermöglicht es TeamViewer 10 unattended, also ohne Nutzerinteraktion, zu installieren, was eigentlich ja dem MSI-Paket vorbehalten ist – welches wiederum leider ausschließlich mit der (sehr kostspieligen) Corporate-Lizenz verfügbar ist.
Mögliche und nötige Anpassungen für die TeamViewer 10 unattended install
- Das Verbindungs-Passwort, sowie die TeamViewer-Konto Daten, werden aus der INI-Datei „tv10_full.conf“ geladen. Dort gibt es auch eine Option um die Verzögerung zwischen simulierten Tastendrücken anzupassen (Beispiel-INI siehe Download)
- Das Skript erwartet einen deutschen Installer, wenn die erwarteten Texte angepasst werden kann es aber auch für andere Sprachversionen genutzt werden.
Änderungen gegenüber der Vorversion
- Der Import der Einstellungen erfolgt nur noch wenn ein entsprechender Export gefunden wird
- In der Konfigurationsdatei gibt es eine neue Option: „SleepDelay“ unter „Advanced“ – ist dieser Wert größer als 0 legt das Script zusätzliche Pausen ein, an einigen Stellen die mir beim testen in einer langsamen VM als kritisch aufgefallen sind. Der Wert wird in Millisekunden angegeben, genau wie SendKeyDelay unter Setup. Default ist nicht zu warten (0), in der dem Download beiliegenden Config ist aber ein Wert von 750 hinterlegt – dieser hat alle Timingprobleme in meiner VM behoben. Wenn die Vorgänger-Versionen problemfrei funktionierten kann dieser Wert ruhig auf 0 gesetzt werden.
- Accountname, Accountpasswort und Verbindungspasswort werden jetzt als „raw“ string gesendet. AutoIt wandelt standardmäßig einige Sonderzeichen in „modifier keys“ wie STRG, ALT usw. um – dies führte zu Problemen wenn einer dieser drei Strings eines der folgenden Zeichen enthielt: „!, +, ^, #“.
- Fehlt in der Config das Verbindungspasswort, oder die Accountdaten, wird die Ausführung nun frühzeitig abgebrochen
Hier das Skript, wieder mit AutoIt realisiert:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\update.ico
#AutoIt3Wrapper_Outfile=tv10_full.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Comment=TeamViewer 10 unattented installscript
#AutoIt3Wrapper_Res_Description=This script automates the TeamViewer 10 setup
#AutoIt3Wrapper_Res_Fileversion=1.4.0.1
#AutoIt3Wrapper_Res_LegalCopyright=© 2015
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$verTag = "10" ; Tested with installer version 10.0.38475.0
$strTrayTitle = "TeamViewer " & $verTag & " Auto-Install"
$wTitle = "TeamViewer " & $verTag & " Installation"
$wTitle2 = "Unbeaufsichtigter Zugriff"
$wTitle3 = "Unbeaufsichtigter Zugriff - Schritt 1 von 2"
$wTitle4 = "Unbeaufsichtigter Zugriff - Schritt 2 von 2"
$strUser = IniRead(@ScriptDir & "\tv" & $verTag & "_full.conf", "Setup", "AccountUsername", "")
$strPass = IniRead(@ScriptDir & "\tv" & $verTag & "_full.conf", "Setup", "AccountPassword", "")
$strPassword = IniRead(@ScriptDir & "\tv" & $verTag & "_full.conf", "Setup", "ConnectPassword", "")
$iDelay = Int(IniRead(@ScriptDir & "\tv" & $verTag & "_full.conf", "Advanced", "SleepDelay", "0"))
Opt("SendKeyDelay", Int(IniRead(@ScriptDir & "\tv" & $verTag & "_full.conf", "Setup", "SendKeyDelay", "250")) )
$iErr = 0;
If $strUser == "" Then
MsgBox(0, "Fehler!", "Der Teamviewer-Account ('AccountUsername') konnte nicht in tv" & $verTag & "_full.conf gefunden werden!");
$iErr = 1;
EndIf
If $strPass == "" Then
MsgBox(0, "Fehler!", "Das Teamviewer-Account Passwort ('AccountPassword') konnte nicht in tv" & $verTag & "_full.conf gefunden werden!");
$iErr = 1;
EndIf
If $strPassword == "" Then
MsgBox(0, "Fehler!", "Das Verbindungs-Passwort ('ConnectPassword') konnte nicht in tv" & $verTag & "_full.conf gefunden werden!");
$iErr = 1;
EndIf
If $iErr == 1 Then
Exit
EndIf
; Install
TrayTip($strTrayTitle, "Warte auf Setup...", 0, 1)
WinWait($wTitle, "Installieren, um später aus der Ferne auf diesen Computer zuzugreifen")
TrayTip($strTrayTitle, "Konfiguriere Installation...", 0, 1)
WinActivate($wTitle)
Sleep($iDelay)
WinWaitActive($wTitle)
ControlClick($wTitle, "", "[CLASS:Button; INSTANCE:5]") ; Installieren, um später aus der Ferne auf diesen Computer zuzugreifen check
ControlClick($wTitle, "", "[CLASS:Button; INSTANCE:8]") ; privat / nicht-kommerziell check
ControlClick($wTitle, "", "[CLASS:Button; INSTANCE:10]") ; Erweiterte Einstellungen check
ControlClick($wTitle, "", "[CLASS:Button; INSTANCE:2]") ; Stimme zu - weiter
WinWait($wTitle, "Erweiterte Einstellungen")
Sleep($iDelay)
ControlClick($wTitle, "", "[CLASS:Button; INSTANCE:2]") ; Fertig stellen
WinWaitClose($wTitle)
; Install done - adding to list
TrayTip($strTrayTitle, "Installation abgeschlossen, füge Computer zur Support-Liste hinzu...", 0, 1)
WinWait($wTitle2, "Unbeaufsichtigten Zugriff einrichten")
WinActivate($wTitle2)
Sleep($iDelay)
WinWaitActive($wTitle2)
ControlClick($wTitle2, "", "[CLASS:Button; INSTANCE:2]") ; Weiter
WinWait($wTitle3, "Kennwort")
WinActivate($wTitle3)
Sleep($iDelay)
WinWaitActive($wTitle3)
ControlSend($wTitle3, "", "[CLASS:Edit; INSTANCE:2]", $strPassword, 1) ; Passwort 1
Sleep($iDelay)
ControlSend($wTitle3, "", "[CLASS:Edit; INSTANCE:3]", $strPassword, 1) ; Passwort confirm
Sleep($iDelay)
ControlClick($wTitle3, "", "[CLASS:Button; INSTANCE:2]") ; Weiter
WinWait($wTitle4, "Ich habe bereits ein TeamViewer Konto")
WinActivate($wTitle4)
Sleep($iDelay)
WinWaitActive($wTitle4)
ControlClick($wTitle4, "", "[CLASS:Button; INSTANCE:2]") ; Ich habe bereits ein TeamViewer Konto
ControlSend($wTitle4, "", "[CLASS:Edit; INSTANCE:2]", $strUser, 1) ; User
Sleep($iDelay)
ControlSend($wTitle4, "", "[CLASS:Edit; INSTANCE:3]", $strPass, 1) ; Pass
Sleep($iDelay)
ControlClick($wTitle4, "", "[CLASS:Button; INSTANCE:6]") ; Weiter
WinWait($wTitle2, "Abschluss des Assistenten")
WinActivate($wTitle2)
Sleep($iDelay)
WinWaitActive($wTitle2)
ControlClick($wTitle2, "", "[CLASS:Button; INSTANCE:7]") ; Fertigstellen
Sleep($iDelay)
WinWaitClose($wTitle2)
TrayTip($strTrayTitle, "", 0, 1)
; Close initial launch
WinWait("TeamViewer", "Bitte geben Sie die ID Ihres Partners ein, um dessen Computer fernzusteuern.")
WinActivate("TeamViewer", "Bitte geben Sie die ID Ihres Partners ein, um dessen Computer fernzusteuern.")
Sleep($iDelay)
WinClose("TeamViewer", "Bitte geben Sie die ID Ihres Partners ein, um dessen Computer fernzusteuern.")
; Import configuration (if exists)
Local $iFileExists = FileExists(@ScriptDir & "\tv" & $verTag & "_full.reg")
If $iFileExists Then
TrayTip($strTrayTitle, "Alles erledigt, setze noch ein paar Einstellungen...", 0, 1)
RunWait(@ComSpec & " /c net stop TeamViewer", @ScriptDir)
RunWait(@ComSpec & " /c ""regedit.exe /s tv" & $verTag & "_full.reg""", @ScriptDir)
RunWait(@ComSpec & " /c net start TeamViewer", @ScriptDir)
EndIf
TrayTip($strTrayTitle, "Alles fertig - beende mich.", 15, 1)
Exit
Natürlich macht es nur kompiliert Sinn.
Download TeamViewer 10 unattended script
In diesem Archiv sind der Quelltext, die kompilierte Executable und eine Beispielkonfiguration. Vor Benutzung muss die Datei „tv10_full.conf“ mit den eigenen Daten gefüllt werden. Um die TeamViewer 10 unattended Installation zu starten muss dann einfach das TeamViewer 10 Setup, gefolgt vom Script gestartet werden. Da das Script aber sowieso auf die Setup-Fenster wartet spielt die Reihenfolge eigentlich keine Rolle, es kann genauso gut zuerst das Script und dann erst das Setup gestartet werden.
TeamViewer 10 unattented setupscript (585 Downloads)
Auch das Skript funktioniert super. Viel zu geil. Nochmal THX !
Wobei eine Frage hätte ich noch: Wäre es noch irgendwie möglich die Benutzerdaten in der .conf Datei zu verschlüsseln? Ich weiss, das ist evtl etwas unnötig, aber ich hab ungern Benutzername und Passwort im Klartext wo stehen :).
Möglich ja – aber nicht sinnvoll.
Sie müssen vom Script ja im Klartext eingegeben werden, in so fern käme nur eine reversible Verschlüsselung und kein Hashing (zB md5, sha1 etc) in Frage. Da der Key zusammen mit dem Script verteilt werden müsste wäre das sinnlos.
Ok, man könnte natürlich davon ausgehen das auf den Clients ein geeigneter Key hinterlegt ist den man zur Ver-/Entschlüsselung nutzen könnte. Aber das dürfte selbst in Enterprise-Umgebungen nicht immer gegeben sein…
Also: Nein, meiner Meinung nach nicht sinnvoll realisierbar. Falls du das anders siehst, feel free – der Code ist ja da…
edit: Und danke für’s testen