Deinstallation via Batch bei ca 2000 PCs
Hallo liebe Administratorinnen und Administratoren,
seit etwa drei Tagen quäle ich mich mit einem Problem herum. Vielleicht gibt es ja jemand unter euch der eine gute Idee hat. Ich möchte via Batch und AutoIt ein Programm Deinstallieren und danach eines installieren. Die PCs sind Testgeräte und alle User haben Administratoren Recht. Das hat natürlich zu Folge dass die Betriebssysteme alle unterschiedlich sind und im AppWiz.cpl keine einheitliche Reihenfolge existiert. Die PCs sind in keiner Domäne und somit nicht über GP konfigurierbar. Das ist auch so gewollt, das es Testsysteme sind. Ein Liefersystem um Updates zu integrieren gibt es, kann durch entpacken und ausführen einer Batch Datei initiiert werden. Das Programm welches ich deinstallieren möchte, hat je nach Zeitpunkt der Installation eine unterschiedliche InstallGuid, somit auch einen unterschiedlichen Install Pfad. Ich weiß aber das die Deinstallationsroutine sich in einen Unterverzeichnis in C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\ befindet und die Setup.ini einen Eintrag mit Beispielsweise "AppName=Wurstbrot mit Käse" hat. In der Setup.ini steht auch die "InstallGuid={314EEA6D-6A78-11B4-932F-00A0D02289CC}" was dem Unterverzeichnis entspricht: "C:\Programme\InstallShield Installation Information\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\" Durch die Integration >"C:\Programme\InstallShield Installation Information\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\setup.exe" -runfromtemp -l0x0409 -removeonly< kann ich das Programm zusammen mit AutoIt dann auch problemlos deinstallieren. Ausprobiert habe ich folgendes: for /F "delims=" %%a in ('dir /b /s Setup.ini') do (find "AppName=Wurstbrot mit Käse" "%%~fa" && "%%~fa">> datei.txt) dadurch stoppt das Batch nach Auffinden von "AppName=Wurstbrot mit Käse" aber es wird die datei.txt leider ohne Inhalt erstellt. Mit for /F "delims=" %%a in ('dir /b /s Setup.ini') do (find "AppName=Wurstbrot mit Käse" "%%~fa" >> datei.txt) bleibt die Batch nicht stehen und die datei.txt enthält:
C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\SETUP.INI
AppName=Wurstbrot mit Käse
C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\{95A57DD4-BF61-4A15-9A7B-A1FF015AA145}\SETUP.INI
C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\{BB6A4928-5574-4CBF-9AC9-FC57C22F9212}\SETUP.INI
Jetzt stellt sich mir die Frage wie extrahiere ich die Pfadinformation ohne die --- und was passiert wenn die Information an 2. oder 3. Stelle steht. Gibt es die Möglichkeit wenn "AppName=Wurstbrot mit Käse" gefunden wurde, den Pfad der Setup.ini in eine Variable (z.B.: %pfad%) zu füllen und dann mit ""%pfad%"\setup.exe" -runfromtemp -l0x0409 -removeonly die Deinstallationsroutine zu starten.
Um das noch mal zu verdeutlichen, aus:
""%pfad%"\setup.exe" -runfromtemp -l0x0409 -removeonly
soll sich dann prinzipiell folgendes ergeben:
"C:\Programme\InstallShield Installation Information\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\setup.exe" -runfromtemp -l0x0409 -removeonly
Uff, was für ein Roman, hatte die Hoffnung dass vielleicht einer nen guten Tipp für mich hat. Vielen Dank erst mal fürs lesen.
seit etwa drei Tagen quäle ich mich mit einem Problem herum. Vielleicht gibt es ja jemand unter euch der eine gute Idee hat. Ich möchte via Batch und AutoIt ein Programm Deinstallieren und danach eines installieren. Die PCs sind Testgeräte und alle User haben Administratoren Recht. Das hat natürlich zu Folge dass die Betriebssysteme alle unterschiedlich sind und im AppWiz.cpl keine einheitliche Reihenfolge existiert. Die PCs sind in keiner Domäne und somit nicht über GP konfigurierbar. Das ist auch so gewollt, das es Testsysteme sind. Ein Liefersystem um Updates zu integrieren gibt es, kann durch entpacken und ausführen einer Batch Datei initiiert werden. Das Programm welches ich deinstallieren möchte, hat je nach Zeitpunkt der Installation eine unterschiedliche InstallGuid, somit auch einen unterschiedlichen Install Pfad. Ich weiß aber das die Deinstallationsroutine sich in einen Unterverzeichnis in C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\ befindet und die Setup.ini einen Eintrag mit Beispielsweise "AppName=Wurstbrot mit Käse" hat. In der Setup.ini steht auch die "InstallGuid={314EEA6D-6A78-11B4-932F-00A0D02289CC}" was dem Unterverzeichnis entspricht: "C:\Programme\InstallShield Installation Information\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\" Durch die Integration >"C:\Programme\InstallShield Installation Information\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\setup.exe" -runfromtemp -l0x0409 -removeonly< kann ich das Programm zusammen mit AutoIt dann auch problemlos deinstallieren. Ausprobiert habe ich folgendes: for /F "delims=" %%a in ('dir /b /s Setup.ini') do (find "AppName=Wurstbrot mit Käse" "%%~fa" && "%%~fa">> datei.txt) dadurch stoppt das Batch nach Auffinden von "AppName=Wurstbrot mit Käse" aber es wird die datei.txt leider ohne Inhalt erstellt. Mit for /F "delims=" %%a in ('dir /b /s Setup.ini') do (find "AppName=Wurstbrot mit Käse" "%%~fa" >> datei.txt) bleibt die Batch nicht stehen und die datei.txt enthält:
C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\SETUP.INI
AppName=Wurstbrot mit Käse
C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\{95A57DD4-BF61-4A15-9A7B-A1FF015AA145}\SETUP.INI
C:\PROGRAMME\INSTALLSHIELD INSTALLATION INFORMATION\{BB6A4928-5574-4CBF-9AC9-FC57C22F9212}\SETUP.INI
Jetzt stellt sich mir die Frage wie extrahiere ich die Pfadinformation ohne die --- und was passiert wenn die Information an 2. oder 3. Stelle steht. Gibt es die Möglichkeit wenn "AppName=Wurstbrot mit Käse" gefunden wurde, den Pfad der Setup.ini in eine Variable (z.B.: %pfad%) zu füllen und dann mit ""%pfad%"\setup.exe" -runfromtemp -l0x0409 -removeonly die Deinstallationsroutine zu starten.
Um das noch mal zu verdeutlichen, aus:
""%pfad%"\setup.exe" -runfromtemp -l0x0409 -removeonly
soll sich dann prinzipiell folgendes ergeben:
"C:\Programme\InstallShield Installation Information\{314EEA6D-6A78-11B4-932F-00A0D02289CC}\setup.exe" -runfromtemp -l0x0409 -removeonly
Uff, was für ein Roman, hatte die Hoffnung dass vielleicht einer nen guten Tipp für mich hat. Vielen Dank erst mal fürs lesen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 244560
Url: https://administrator.de/forum/deinstallation-via-batch-bei-ca-2000-pcs-244560.html
Ausgedruckt am: 13.04.2025 um 21:04 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
schau mal in die Registry unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall". Du könntest z.B. ein Batch- oder AutoIT-Skript schreiben, welches deine Software anhand des Namens aus diesem Baum sucht, und den Eintrag "UninstallString" oder "QuietUninstallString" ausführt.
PS: Warum nimmst du die PCs nicht in eine Domäne auf? Die User können sich ja trotzdem an den lokalen Maschinen anmelden mit lokalen Admins? Würde solche Mammutaufgaben sehr erleichtern :D
mfg
schau mal in die Registry unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall". Du könntest z.B. ein Batch- oder AutoIT-Skript schreiben, welches deine Software anhand des Namens aus diesem Baum sucht, und den Eintrag "UninstallString" oder "QuietUninstallString" ausführt.
PS: Warum nimmst du die PCs nicht in eine Domäne auf? Die User können sich ja trotzdem an den lokalen Maschinen anmelden mit lokalen Admins? Würde solche Mammutaufgaben sehr erleichtern :D
mfg
Hi,
so wie @Dani das geschildert hat hatte ich das gemeint; damit holt er auf jedem PC den (ja auf jedem PC unterschiedlichen) korrekten Uninstall-Befehl.
mfg
so wie @Dani das geschildert hat hatte ich das gemeint; damit holt er auf jedem PC den (ja auf jedem PC unterschiedlichen) korrekten Uninstall-Befehl.
mfg
Wie wäre es damit: alle "setup.ini" durchsuchen und dann den Uninstall-String basteln:
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
@ECHO OFF
REM 0x32f1
SETLOCAL ENABLEDELAYEDEXPANSION
IF DEFINED ProgramFiles(x86) (CD /D "%PROGRAMFILES(x86)%\InstallShield Installation Information") ELSE (CD /D "%PROGRAMFILES%\InstallShield Installation Information")
FOR /F "delims=" %%i IN ('DIR /B /S setup.ini') DO (
FIND "AppName=MyAppName" "%%i"
IF "!ERRORLEVEL!"=="0" (
SET tempStr=%%i
ECHO "!tempStr:~0,-10!\setup.exe" -runfromtemp -l0x0409 -removeonly
)
)
Hallo @rolandsc7,
ist die Software unter
Führe von einer Commandline aus.
Sollte es in dieser Liste vorhanden sein kannst du es mit aus einer admin-shell heraus deinstallieren.
Gruß,
@Snowman25
ist die Software unter
wmic
registriert?Führe von einer Commandline
wmic product
Sollte es in dieser Liste vorhanden sein kannst du es mit
wmic product where "name like '%<wurstbrot>%'" call uninstall
%
Ist ein Wildcard-charakter. Wenn du dies innerhalb einer Batch ausführen möchtest, musst du die %
-Zeichen jeweils verdoppeln.Gruß,
@Snowman25
Der Trick dabei ist die dritte Zeile:
Näheres siehe z.B. http://www.netikka.net/tsneti/info/tscmd158.htm
mit ":~0,-10" werden nur die letzten 10 Zeichen abgeschnitten, weil im tempStr ja der Pfad zur Setup.ini steht. 9 würden zwar auch reichen, aber so können wir - der Übersicht halber - den Backslash vor der setup.exe im neu zusammengebauten String selber setzen. Genauer betrachtet würde in deinem Fall auch reichen:
um nur "ini" abschneiden und "exe" anhängen.
Wenn du jetzt beispielsweise nur die ID brauchst, kannst du den String natürlich von vorne auch noch abschneiden, etwa
bzw. dann direkt in deine REG QUERY einbauen
1
SETLOCAL ENABLEDELAYEDEXPANSION
Näheres siehe z.B. http://www.netikka.net/tsneti/info/tscmd158.htm
mit ":~0,-10" werden nur die letzten 10 Zeichen abgeschnitten, weil im tempStr ja der Pfad zur Setup.ini steht. 9 würden zwar auch reichen, aber so können wir - der Übersicht halber - den Backslash vor der setup.exe im neu zusammengebauten String selber setzen. Genauer betrachtet würde in deinem Fall auch reichen:
1
2
2
SET tempStr=%%i
ECHO "!tempStr:~0,-3!exe" -runfromtemp -l0x0409 -removeonly
um nur "ini" abschneiden und "exe" anhängen.
Wenn du jetzt beispielsweise nur die ID brauchst, kannst du den String natürlich von vorne auch noch abschneiden, etwa
1
ECHO "!tempStr:~52,-3!exe" -runfromtemp -l0x0409 -removeonly
bzw. dann direkt in deine REG QUERY einbauen
1
'reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\!tempStr:~52,-10! /v "DisplayName"