Julez 1 Geschrieben 23. Februar 2021 Melden Teilen Geschrieben 23. Februar 2021 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. Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 23. Februar 2021 Melden Teilen Geschrieben 23. Februar 2021 vor 15 Minuten schrieb Julez: - Interessehalber: Was bedeutet in diesem Fall "/v" ? Cmd.exe aufrufen > reg query /? eingeben und ENTER drücken. 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 23. Februar 2021 Melden Teilen Geschrieben 23. Februar 2021 vor 20 Minuten schrieb Julez: .... Hierfür haben wir ein Skript geschrieben .... <SCNR> <OT> Wow .... warum man sich im Jahre 2021 noch sowas selbst antut, werde ich wohl nie verstehen. </OT> </SCNR> Zitieren Link zu diesem Kommentar
Julez 1 Geschrieben 23. Februar 2021 Autor Melden Teilen Geschrieben 23. Februar 2021 vor 11 Minuten schrieb Sunny61: Cmd.exe aufrufen > reg query /? eingeben und ENTER drücken. Danke, und wieder was dazu gelernt vor 3 Minuten schrieb BOfH_666: <SCNR> <OT> Wow .... warum man sich im Jahre 2021 noch sowas selbst antut, werde ich wohl nie verstehen. </OT> </SCNR> Ich bin offen für bessere Vorschläge Deinerseits Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 23. Februar 2021 Melden Teilen Geschrieben 23. Februar 2021 vor 3 Stunden schrieb Julez: Wir rollen derzeit auf allen Clients verschiedene Instanzen (Host/Full) des neuen TeamViewer Clients per GPO aus. Igitt, da gibt es im Jahr 2021 weitaus bessere und zuverlässigere Methoden. Eine, die ist auch kostenlos, ist die Verwendung vom WSUS und WSUS Package Publisber in Kombination. Das erfordert allerdings 1-2 Stunden Einarbeitung, und das Lesen der HowTos, anschließend kann man deine Anforderung damit sicher recht einfach umsetzen. WSUS.de > WSUS Package Publisher und Local Update Publisher. Einfach mal alle HowTos lesen und dann langsam anfangen damit. Das aktuelle Release gibt es auf Github: https://github.com/DCourtel/Wsus_Package_Publisher/releases Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 23. Februar 2021 Melden Teilen Geschrieben 23. Februar 2021 vor 3 Stunden schrieb Julez: Ich bin offen für bessere Vorschläge Deinerseits Mir ging es um die gewählte Script-Technologie - Batch. Hier werden bestimmt wieder ein paar Kollegen anderer Meinung sein, ich denke aber, dass man für Aufgaben, die deutlich mehr als nur ein oder zwei Befehlszeilen enthalten und eine gewisse Komplexität aufweisen, stattdessen auf Powershell setzen sollte. Da es die deutlich mächtigere und dabei aber auch die besser lesbare und robustere Script-Technologie darstellt. Bei der "Verteilung" wäre ich dann wieder bei @Sunny61 ... oder, falls verfügbar, eine vernünftige Software-Verteilung wie SCCM oder so. Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 23. Februar 2021 Melden Teilen Geschrieben 23. Februar 2021 Ach, Batch ist nicht schlecht - nur macht man halt manchmal ganz komische Konstrukte (=Verrenkungen), die in Powershell total trivial wären Und für unattended Installationen - msfn.org kennst Du? Ansonsten gilt das vorgesagte - WSUS/WPP oder SCCM helfen da echt viel. Zitieren Link zu diesem Kommentar
Julez 1 Geschrieben 24. Februar 2021 Autor Melden Teilen Geschrieben 24. Februar 2021 Hmm.. allen Anschein nach hänge ich da wirklich wohl in einer Zeitkapsel fest. Ich werde mir WSUS mal ansehen. SCCM wurde mir auch schon einmal empfohlen. Nur macht das glaube ich in unserem Fall nicht enorm viel Sinn: Wir haben zwar viele Clients und genau so viele Server Deutschlandweit, die Software ändert sich jedoch ausserhalb des Lebenszyklus nur geringfügig. Ich werde mich mal reinlesen, schaden kann es ja nicht - Danke für die Tipps. Hätte jedoch auch noch jemand eine Antwort auf meine doch so "triviale" Frage, wie ich diese Registrykey-Abfrage in meinen Code rein bekomme? Beste Grüße und vielen Dank. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Februar 2021 Melden Teilen Geschrieben 24. Februar 2021 vor 5 Minuten schrieb Julez: ..... Nur macht das glaube ich in unserem Fall nicht enorm viel Sinn: Wir haben zwar viele Clients und genau so viele Server Deutschlandweit, die Software ändert sich jedoch ausserhalb des Lebenszyklus nur geringfügig. Sind das Windows-Server und Windows-Clients? Und installiert ihr keine Updates für diese Clients und Server? Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 24. Februar 2021 Melden Teilen Geschrieben 24. Februar 2021 Moin, vor 4 Minuten schrieb Julez: Hätte jedoch auch noch jemand eine Antwort auf meine doch so "triviale" Frage, wie ich diese Registrykey-Abfrage in meinen Code rein bekomme? du hast doch den fertigen Code schon. Warum probierst du das nicht einfach aus? Du solltest ein Batch übrigens nicht mit "exit" beenden, weil das den ganzen CMD-Prozess beendet. Das kann zu schwer auffindbaren Fehlern führen. Besser: GOTO :eof [Goto - Jump to label - Windows CMD - SS64.com]https://ss64.com/nt/goto.html Gruß, Nils 1 Zitieren Link zu diesem Kommentar
Julez 1 Geschrieben 24. Februar 2021 Autor Melden Teilen Geschrieben 24. Februar 2021 vor 1 Stunde schrieb BOfH_666: Sind das Windows-Server und Windows-Clients? Und installiert ihr keine Updates für diese Clients und Server? Unser Systemhaus rollt Updates über WSUS aus. vor 1 Stunde schrieb NilsK: Moin, du hast doch den fertigen Code schon. Warum probierst du das nicht einfach aus? Du solltest ein Batch übrigens nicht mit "exit" beenden, weil das den ganzen CMD-Prozess beendet. Das kann zu schwer auffindbaren Fehlern führen. Besser: GOTO :eof [Goto - Jump to label - Windows CMD - SS64.com]https://ss64.com/nt/goto.html Gruß, Nils Hi Nils, hat leider nicht geklappt aber ich werde deinen :eof-Rat befolgen und mit einbauen. Mein abgeänderter Code hat zumindest mal zu einem messbaren Erfolg geführt: $Version = reg query HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\TeamViewer /f Version /t REG_SZ /c /e if ($Version -eq " Version REG_SZ 15.14.5 HC") {echo "ok"} else {echo "falsch"} Danke für eure Hilfe. Ich hab wohl noch einiges an Nachholbedarf, deshalb wird dieses Forum jetzt erstmal zum stöbern in die Favicons gepinnt =) Bis bald 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Februar 2021 Melden Teilen Geschrieben 24. Februar 2021 vor 5 Minuten schrieb Julez: Unser Systemhaus rollt Updates über WSUS aus. OK, jetzt bin ich komplett verwirrt. ... ihr habt ein Systemhaus, was sich um eure Server und Clients kümmert, ihr installiert aber Software trotzdem allein? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 24. Februar 2021 Melden Teilen Geschrieben 24. Februar 2021 Wenn du schon Powershell nutzt musst du kein Reg Query machen. PS> Get-ItemProperty "HKLM:\SOFTWARE\Mozilla\Mozilla Firefox 78.7.1 ESR" GeckoVer : 78.7.1 ESR : 1 PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 78.7.1 ESR PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla PSChildName : Mozilla Firefox 78.7.1 ESR PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PS> if((Get-ItemProperty "HKLM:\SOFTWARE\Mozilla\Mozilla Firefox 78.7.1 ESR").GeckoVer -eq '78.7.1'){"found"}else{"not found"} found Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Februar 2021 Melden Teilen Geschrieben 24. Februar 2021 vor 15 Minuten schrieb Dukel: Wenn du schon Powershell nutzt musst du kein Reg Query machen. Wie kommst Du auf Powershell? ... ich glaub mit Powershell hätten wir das Thema schon lange erfolgreich abgeschlossen. Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 24. Februar 2021 Melden Teilen Geschrieben 24. Februar 2021 In PowerShell wäre da Get-Package / Uninstall-Package / Install-Package ein Ansatz. :) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.