Hallo zusammen,
ich habe nun schon des Öfteren bei euch im Forum zu einigen Themen erfolgreich Hilfe gefunden - Danke dafür an die fleißigen Antworter. Nun habe ich eine Frage, die leider (nicht ganz) im Forum zu finden ist - verbessert mich gerne, falls ein Artikel hierfür schon existiert.
Leider bin ich in Anwendungsentwicklung nie so richtig gut gewesen und krampfe mich immer durch dieses Thema =)
Zur Aufgabenstellung:
- Wir rollen derzeit auf allen Clients verschiedene Instanzen (Host/Full) des neuen TeamViewer Clients per GPO aus.
- Hierfür haben wir ein Skript geschrieben welches die aktuell installierte Version finden, löschen und mithilfe der .msi vom Fileserver neu installieren soll. --> Das klappt auch schon super!
- Grund hierfür ist die Bereitstellung des APITokens bei erneuter Installation, welchen wir auch zukünftig jedem neuen Client automatisch mitgeben möchten.
- Wir benötigen noch eine Abfrage im Skript, die vorab prüft ob schon die aktuelle Version installiert ist, da er sonst diesen Vorgang mit jedem Reboot erneut ausführt.
Unser aktueller Code:
@echo off
REM UNINSTALL CURRENT TEAMVIEWER INSTALLATION
tasklist /FI "IMAGENAME eq TeamViewer.exe" 2>NUL | find /I /N "TeamViewer.exe">NUL
if "%ERRORLEVEL%"=="0" (GOTO :KILL) ELSE (GOTO :REMOVEMSI)
:KILL
taskkill /f /im TeamViewer.exe
TIMEOUT 2
GOTO :REMOVEMSI
:REMOVEMSI
wmic product where vendor="TeamViewer"
if not "%errorlevel%"=="0" GOTO :CHECKOS
for /f "tokens=2 delims==" %%f in ('wmic product Where "vendor like 'TeamViewer'" get IdentifyingNumber /value ^| find "="') do set "id=%%f"
msiexec.exe /x "%id%" /qn
GOTO :CHECKOS
:CHECKOS
cd\
Set "OS64=C:\Program Files (x86)"
IF EXIST "%OS64%" (GOTO :UNINSTALL64) ELSE (GOTO :UNINSTALL32)
:UNINSTALL64
cd\
Set "OLD64=C:\Program Files (x86)\TeamViewer\Version*"
IF EXIST "%OLD64%" (GOTO :PREVIOUS64) ELSE (GOTO :REMOVE64)
:UNINSTALL32
cd\
Set "OLD32=C:\Program Files\TeamViewer\Version*"
IF EXIST "%OLD32%" (GOTO :PREVIOUS32) ELSE (GOTO :REMOVE32)
:PREVIOUS32
cd\
cd %ProgramFiles%\TeamViewer\Version*
IF NOT EXIST "*uninstall*" GOTO :REMOVE32
start uninstall.exe /S
GOTO :REMOVE32
:REMOVE32
cd\
cd %ProgramFiles%\TeamViewer
IF NOT EXIST "*uninstall*" GOTO :REMOVEFILES32
start uninstall.exe /S
GOTO :REMOVEFILES32
:REMOVEFILES32
reg delete "HKLM\Software\TeamViewer" /f
cd %temp%
rd TeamViewer /s /Q
GOTO :INSTALL
:PREVIOUS64
cd\
cd %ProgramFiles(x86)%\TeamViewer\Version*
IF NOT EXIST "*uninstall*" GOTO :REMOVE64
start uninstall.exe /S
GOTO :REMOVE64
:REMOVE64
cd\
cd %ProgramFiles(x86)%\TeamViewer
IF NOT EXIST "*uninstall*" GOTO :REMOVEFILES64
start uninstall.exe /S
GOTO :REMOVEFILES64
:REMOVEFILES64
reg delete "HKLM\Software\Wow6432Node\TeamViewer" /f
cd %temp%
rd TeamViewer /s /Q
GOTO :INSTALL
:INSTALL
start /wait msiexec.exe /i "\\Fileserver\file\Software\Verteilung\Teamviewer\Teamviewer 15\TeamViewerMSI\Host\TeamViewer_Host.msi" /qn CUSTOMCONFIGID="" APITOKEN=""-"" ASSIGNMENTOPTIONS="--reassign --alias %ComputerName% --grant-easy-access --group-id "" --proxy xxx.xxx.xxx.xxx:xxxx
exit
Nach etlichem Forengewälze erschien mir die Abfrage des Registry Keys als sinnvollere Alternative zu UNC-Pfad und .exe Suche
Nun zu dem was ich in eurem Forum gefunden habe:
Link: Forenbeitrag von MC Bain - Regkey per Batch abfragen
reg query "\\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\TeamViewer\Version" /v "15.14.5 HC"
if %errorlevel%==0 GOTO exit
if %errorlevel%==1 GOTO :TASKCHECK
:TASKCHECK
- Der Registry Pfad entspricht dem auf unseren Clients.
- Kann ich diesen Code einfach nach dem Echo einfügen um eine erneute Installation bei aktueller Programmversion zu verhindern?
- Bonusfrage: Gibt es die Möglichkeit, den Erfolg der Datei zu "messen"?
-- Hierbei dachte ich daran, bei übersprungener Installation eine Datei auszugeben die "Keine_erneute_Installation.txt" bzw. bei erfolgreicher Aktualisierung "Programmaktualisierung_durchgeführt.txt" heißt.
-- Diese Ergebnisdateien werde ich nach meinen Tests aus dem Skript wieder entfernen
- Interessehalber: Was bedeutet in diesem Fall "/v" ?
Ich hoffe, ich konnte alles verständlich wiedergeben. Falls ihr noch weitere Informationen benötigt, gebe ich sie gerne weiter. Ich danke vielmals für eure Hilfe.
Beste Grüße.