Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Batch zum installieren und deinstallieren von Programmen

Mitglied: PittoS

PittoS (Level 1) - Jetzt verbinden

25.07.2011 um 08:57 Uhr, 3831 Aufrufe, 6 Kommentare

Geplant ist ein Skript zum feststellen der aktuellen Version eines oder auch meherer Programme und falls eine ältere Version installiert ist, soll diese deinstalliert und die neue Version installiert werden

Hallo zusammen,

wie vielleicht aus dem Vorwort ersichtlich möchte ich nun mittels eines Batch-Skripts unter XP und 7 mehrere Programme auf den aktuellsten Stand bringen.
Dabei soll das Skript auf beiden Plattformen laufen.

Man müsste also je nach System zu einem anderen Punkt im Skript springen, dass ist ja an sich nicht so das Problem allerdings funktioniert das schon nicht:

Mit "ver" kann man ja die Windows Version feststellen, allerdings gibt das Skript noch nicht aus, dass es sich um das entsprechende System handelt:

01.
if ('ver') == "Microsoft Windows [Version 6.1.7601]" ( 
02.
echo "Das Betriebssystem ist Windows 7" ) else ( 
03.
echo "Das Betriebssystem ist nicht Windows 7")
Desweiteren zum eigentlichen Sinn und Zweck des Skripts, die deinstallation von älteren Versionen bestimmter Programme und installation der neuen Versionen.

Ich wollte ursprünglich die aktuelle Version mit reg query auslesen, nur muss ich dafür ja schon den Namen des Schlüssels kennen, damit ich die Version auslesen kann, sprich kunktioniert das momentan nur so:

01.
@echo off 
02.
for /f "tokens=2*" %%a in ('reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83216024FF} /v "DisplayName"') do set key=%%b 
03.
echo %key% 
04.
pause
Hier könnte man noch mit "DisplayVersion" die genaue Version auslesen aber wie oben schon geschrieben, müsste ich ja eigentlich den Schlüssel auslesen und nicht unbedingt den Wert, oder habe ich da gerade einen Denkfehler?

Also Schlüssel entsprechend der Version auslesen und dann die jeweiligen aktionen ausführen.

VG
PittoS
Mitglied: PittoS
25.07.2011 um 09:38 Uhr
Den ersten Schritt hab ich nun geschafft, er gibt mir die korrekte Ausgabe aus, wenn die Variable verglichen wird:

01.
For /F "tokens=* skip=1 usebackq" %%a IN (`ver`) do set version=%%a 
02.
echo %version% 
03.
if "%version%" equ "Microsoft Windows [Version 6.1.7601]" ( 
04.
echo "Das Betriebssystem ist Windows 7" ) else ( 
05.
echo "Das Betriebssystem ist nicht Windows 7") 
06.
pause
Ok, meine Frage die an dieser Stelle war hat sich schon gelöst, Windows 7 hat immer die Versionsnummer "6.1.7601" und der Server 2008 hat die Versionsnummer "6.1.7600"

VG
PittoS
Bitte warten ..
Mitglied: PittoS
27.07.2011 um 15:02 Uhr
Hallo zusammen,

es gibt ein kleines Update.
Ich habe nun das Skript so weit, dass ich die aktuellsten Versionen der Programme installieren kann, sofern ich weiss welchen Schlüssel ich in der Registrierung überprüfen muss.

Gibt es vielleicht irgendeine Möglichkeit das ganze vom entsprechenden Schlüssel unabhängig zu machen, so dass ich auch andere Versionen der Programme installieren könnte?
Leider verwendet nicht jede Version eines Programs den selben Schlüssel.

01.
@echo off 
02.
 
03.
set AdobeReader=10.1.0 
04.
set LogFile="F:\Stick\Skripte\Test-Skript\Neue Skripte\LOGFILE.LOG" 
05.
 
06.
if exist "%LogFile%" ( 
07.
	del "%LogFile%" & echo "Altes Logfile wurde geloescht!" 
08.
09.
pause 
10.
 
11.
if exist "C:\Program Files (x86)" ( 
12.
	set ARCH=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 
13.
) ELSE ( 
14.
	set ARCH=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 
15.
16.
 
17.
for /f "tokens=2*" %%a in ('reg query %ARCH%\{AC76BA86-7AD7-1031-7B44-AA1000000001} /v "DisplayVersion"') do set key=%%b 
18.
echo %key% 
19.
if not %key%==%AdobeReader% ( 
20.
	F:\Stick\Skripte\Test-Skript\AdobeReader_Neu\AdbeRdr1010_de_DE.exe /msi EULA_ACCEPT=YES /qn 
21.
) ELSE ( 
22.
	echo "Adobe Reader 		= auf dem aktuellsten Stand!">>%LogFile% 
23.
24.
 
25.
if not %key%==%AdobeReader% ( 
26.
	echo "Adobe Reader		= nicht installiert/aktuell!">>%LogFile% 
27.
28.
pause
Ist vielleicht auch nicht die eleganteste Lösung, aber noch achte ich nicht auf Schönheit ;)

Das zweite Problem was ich habe ist das verwendete Betriebssystem. Das Skript soll ja nachher sowohl auf Windows 7 als auch auf Windows XP laufen (sowohl 32 als auch 64 Bit).
Da sind die Registrierungsschlüssel ja wieder anders.

Hat da jemand einen Tip für mich?

VG
PittoS
Bitte warten ..
Mitglied: PittoS
27.07.2011 um 16:39 Uhr
Hallo,

ok die Registrierungsschlüssel sind auf beiden Systemen nach der Installation der aktuellsten Version alle die selben.

Jetzt bleibt nur noch das Problem mit den älteren Versionen.
Wie kann ich einfach überprüfen, ob und wenn ja, welche Version von einem Programm installiert ist und wenn eine ältere Version installiert ist wie entferne ich diese am besten?

Soll natürlich alles im Batch-Skript ablaufen. Bei manchen Programmen klappt es ohne vorige Deinstallation, aber leider nicht bei allen...

VG
PittoS
Bitte warten ..
Mitglied: PittoS
29.07.2011 um 11:31 Uhr
Hallo nochmal,

also das Skript funktioniert nun bis auf das deinstallieren von veralteten Versionen ganz gut.

Hier mal der aktuelle Code am Beispiel vom PDF-Creator:

01.
@echo off 
02.
 
03.
set PDFCreator=1.2.2 
04.
set ProgsPath=F:\Stick\Tools\install 
05.
 
06.
set LogFile=LOGFILE.LOG 
07.
 
08.
if exist "LOGFILE.LOG" ( 
09.
	del "LOGFILE.LOG" 
10.
11.
 
12.
if exist "C:\Program Files (x86)" ( 
13.
	set ARCH=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 
14.
) ELSE ( 
15.
	set ARCH=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 
16.
17.
 
18.
set key=nix 
19.
for /f "tokens=2*" %%j in ('reg query "%ARCH%\{0001B4FD-9EA3-4D90-A79E-FD14BA3AB01D}" /v "DisplayVersion"') do set key=%%k 
20.
 
21.
if not %key%==%PDFCreator% %ProgsPath%\PDFCreator-1_2_2_setup.exe /SP /VERYSILENT /NORESTART /LOADINF="%ProgsPath%\pdfcreator.inf" 
22.
 
23.
set key=nix 
24.
for /f "tokens=2*" %%j in ('reg query "%ARCH%\{0001B4FD-9EA3-4D90-A79E-FD14BA3AB01D}" /v "DisplayVersion"') do set key=%%k 
25.
 
26.
if %key%==%PDFCreator% ( 
27.
	echo "PDFCreator 		= auf dem aktuellsten Stand!">>%LogFile% 
28.
) ELSE ( 
29.
	echo "PDFCreator		= nicht installiert/aktuell!">>%LogFile% 
30.
31.
 
32.
 
33.
%LogFile% 
34.
 
35.
set key= 
36.
set ProgsPath= 
37.
set LogFile= 
38.
set ARCH= 
39.
set PDFCreator=
Damit die Schleife nicht jedesmal den Wert aus der letzten Schleife übernimmt, wenn der Registrierungsschlüssel noch nicht vorhanden ist, habe ich die Variable vor jeder Schleife zurückgesetzt. Einen Wert musste ich allerdings angeben, da es ja mit leeren Variablen nicht funktioniert ;)

VG
PittoS


PS: Wenn noch jemand nen Tipp hat, wie ich veraltete Versionen im Vorfeld deinstallieren kann, immer her damit
Momentan müsste ich zum Beispiel veraltete Versionen von Java per Hand deinstallieren
Bitte warten ..
Mitglied: PittoS
03.08.2011 um 17:21 Uhr
Hallo zusammen,

melde mich mal wieder, da ich mal wieder nicht weiter komme...

Da es immernoch um oben erwähntes Skript geht, als Antwort.
In der Praxis hat sich nun gezeigt, dass es probleme bei älteren Versionen von Programmen gibt.
Falls zum Beispiel eine ältere Version von Java installiert ist (sagen wir mal Java 6 Update 12) steht die Versionsnummer im Schlüssel mit der Endung {...012FF}.
Wenn ich jetzt die neue Version (Java 6 Update 26) installiere, legt er zwar einen neuen Schlüssel mit der Endung {...026FB} an, allerdings sind die ganzen Produktinformationen wieder im Schlüssel mit der Endung {...012FF}.
In meinem Skript werden allerdings nach der installation noch einmal die Schlüssel überprüft, ob die aktuellste Version wirklich installiert wurde und genau da liegt das Problem.

Java macht das Spielchen mit den Registryschlüsseln mit jeder Version, welche Vor dem Update drauf war.
da ich nicht jeden Schlüssel jeder Version ins Skript schreiben möchte, bin ich auf der Suche nach einer eleganteren Lösung.

Gibt es eine Möglichkeit mehrere Schlüssel in einem Rutsch zu durchsuchen?
Ich habe leider noch nichts derartiges gefunden, nur das man in "bestimmten" Schlüsseln suchen kann...

VG
PittoS
Bitte warten ..
Mitglied: PittoS
09.08.2011 um 11:57 Uhr
Hallo nochmal,

also ich habe jetzt eine Lösung gefunden, zumindest was das Java-Problem betrifft.

Ich benutze nun dieses Skript zum deinstallieren der älteren Versionen von Java:

01.
@echo off 
02.
if exist "C:\Program Files (x86)" ( 
03.
	set ARCH=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 
04.
) ELSE ( 
05.
	set ARCH=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 
06.
07.
echo Durchsuche Registrierung nach aelteren Java Installationen 
08.
for /f %%I in ('reg query %ARCH%') do echo %%I | find "{" > nul && call :All-Installations %%I 
09.
echo Suche abgeschlossen... 
10.
echo Java nicht installiert oder auf dem aktuellsten Stand! 
11.
PAUSE 
12.
goto :EOF 
13.
:All-Installations 
14.
for /f "tokens=2*" %%T in ('reg query %1 /v Publisher 2^> nul') do echo %%U | find "Sun" > nul && call :Sun-Installations %1 
15.
for /f "tokens=2*" %%T in ('reg query %1 /v publisher 2^> nul') do echo %%U | find "Oracle" > nul && call :Oracle-Installations %1 
16.
goto :EOF 
17.
:Sun-Installations 
18.
for /f "tokens=2*" %%T in ('reg query %1 /v DisplayName 2^> nul') do if not "%%U"=="Java(TM) 6 Update 26" echo . A1 Uninstalling - %%U: | find "Java" && call :Java-uninstall %~n1 
19.
for /f "tokens=2*" %%T in ('reg query %1 /v DisplayName 2^> nul') do if not "%%U"=="Java(TM) 6 Update 26" echo . A2 Uninstalling - %%U: | find "J2SE" && call :Java-uninstall %~n1 
20.
goto :EOF 
21.
:Oracle-Installations 
22.
for /f "tokens=2*" %%T in ('reg query %1 /v DisplayName 2^> nul') do if not "%%U"=="Java(TM) 6 Update 26" echo . A3 Uninstalling - %%U: | find "Java" && call :Java-uninstall %~n1 
23.
goto :EOF 
24.
:Java-uninstall 
25.
Rem Uninstaller fuer die installation wird ausgefuehrt 
26.
MsiExec.exe /x%1 /qb 
27.
echo . Deinstallation abgeschlossen, Suche wird fortgesetzt.. 
28.
goto :EOF
So läuft es nun sowohl unter Windows XP als auch Windows 7

Somit braucht das andere Skript nur noch in einem Schlüssel gucken ob java installiert ist und wenn nicht, wird es installiert.

Danke trotzdem fürs "nicht" helfen

Viele Grüsse
PittoS
Bitte warten ..
Ähnliche Inhalte
Windows 7

Script zum Installieren und Deinstallieren eines Treibers

Frage von 2SeitenWindows 73 Kommentare

Hallo Zusammen, Ich versuche gerade ein Script zu schreiben, dass mir bei meiner Grafikkarte den aktuellen Treiber deinstalliert und ...

Batch & Shell

LibreOffice per Batch deinstallieren

gelöst Frage von mfhggoBatch & Shell8 Kommentare

Hallo, ich suche eine Möglichkeit LibreOffice Version 4.2.8.2 per Batch zu deinstallieren. Möglichst sollte der User kein OK, Weiter ...

Windows 7

Incredimail lässt sich weder installieren noch deinstallieren

gelöst Frage von 135746Windows 73 Kommentare

Hi liebe Community, ich stehe hier vor einem Nervenzusammenbruch Habe den PC von einer Bekannten bekommen, weil IncrediMail "nicht ...

Windows Server

Programm über GPO installieren

Frage von MiStWindows Server6 Kommentare

Hallo, ich habe ein Programm in die GPOs eingebaut. Dieses wird auch, wenn ich auf einem Client GPUPDATE /FORCE ...

Neue Wissensbeiträge
Windows Server

SBS 2011: Installation von KB4457144 schlägt beim Reboot fehl - Von Dienst gesperrte Schriftart ursächlich

Tipp von the-buccaneer vor 2 StundenWindows Server

Moinsen zusammen! Das hat mich einige graue Haare gekostet: Ein SBS 2011 weigerte sich schon im August, das monatl. ...

Windows Netzwerk
Browser-Lags und IPv6
Erfahrungsbericht von NixVerstehen vor 8 StundenWindows Netzwerk1 Kommentar

Hallo zusammen, wir betreiben als kleines Speditionsunternehmen ein überschaubares Windows-Netzwerk mit Win10-Clients sowie einem Server 2016 Essentials als "eierlegende ...

Humor (lol)

Erstaunlich, Windows mit extremer Laufzeit (Server) lol

Tipp von mathu vor 11 StundenHumor (lol)5 Kommentare

Was es so alles gibt. :-)

Windows Netzwerk

CGM Praxisarchiv funktioniert auf Clients nach Update auf 4.14 nicht mehr

Tipp von MOS6581 vor 1 TagWindows Netzwerk

Moin, ein Kunde setzt das CGM-Praxisarchiv ein. Mehrplatzinstallation mit SQL-Server. Nachdem letzte Woche auf die 4.14 aktualisiert wurde, funktionierte ...

Heiß diskutierte Inhalte
Hyper-V
Windows Serer 2016 Standard virtualisieren
gelöst Frage von fritte87Hyper-V33 Kommentare

Hallo zusammen, ich muss für eine kleine Firma ein entsprechendes neues kleines Konzept bauen. Ich habe einen Server Standard ...

LAN, WAN, Wireless
Kombiniere mehrere 4G Router zu einem Netzwerk - Anwendung kleine LAN (10-20 Leute)
Frage von HulkTheHeroLAN, WAN, Wireless24 Kommentare

Guten Mittag liebes Administrator - Fourm, ich hoffe ich habe das richtige Thema ausgewählt - ansonsten bitte gerne verschieben ...

Windows Server
Fileserver von 2012 R2 auf 2012R2
gelöst Frage von ThabeusWindows Server23 Kommentare

Moin moin, leider war in der Vergangenheit der Fokus des Betriebs nicht auf Langfristigkeit ausgelegt. Daher stehe ich jetzt ...

Router & Routing
Größere Zahl VPN-Verbindungen mit Fritz-Box einrichten
Frage von miscmikeRouter & Routing15 Kommentare

Hallo Zusammen, ich supporte verschiedene Kunden mit bestehenden LAN-LAN-Kopplungen via FritzBox (7490, FritzOS 7.01) . Anwendungen sind z.B. Kaspersky-KSC ...