Java, ein Grundpfeiler von Windows PCs, der schnell bröckelt und regelmäßig aktualisiert werden muss. Fast immer installiert und leider oftmals nicht auf dem neuesten Stand, wodurch sehr schnell sehr große Sicherheitslücken entstehen können; denn Java wird gerne von Exploits ausgenutzt.
Ein flexible, schnell konfigurierte und scriptbasierte Java Verteilung soll dieses Problem und den damit verbundenen Aufwand auf ein Minimum reduzieren.
Bei dieser wird ein Startscript im AD auf den Zielcomputern, die vom Clientfilter akzeptiert werden, Java sowohl in der 32bit als auch in der 64bit Version installieren.
Die Installation beider Bit-Varianten ist notwendig, da die meisten Browser immernoch ausschließlich als 32bit Fassung existieren. Ein 32bit Browser würde selbst auf einem 64bit System mit installiertem 64bit Java keine existierende Java Installation finden.
Der Aufbau
Bei einem neuen Java Update werden die beiden .exe Installer benötigt, diese müssen entsprechend dem Muster im Bild umbenannt werden. Abschließend müssen noch 2 Zeilen im Script angepasst werden. Das ist der komplette “Aufwand”, wenn ein neues Java Update veröffentlicht wird.
Das Script
Stand: 15.01.2014 (Java 7u51), working
@echo off && color 9f && setlocal set wd=\\lea\Deployment\Software\Java set javaEL32=9 set javaEL64=9 set javaregEL32=9 set javaregEL64=9 set retry=0 set instversion=0 set pa=%processor_architecture% REM ### HIER VERSION NACH UPDATE ANPASSEN ### set main=7 set update=51 REM ############ set version=%main%u%update% set versionlog=%wd%\%version%\all-%version%.log set alllog=%wd%\java-all.log REM Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren ::for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto check ::goto end REM Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end :check if not exist %wd%\%version% md %wd%\%version% REM complete Ordner ersetzt durch Registry Versionskontrolle ::if exist %wd%\%version%\%computername% goto end for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /v "Java7FamilyVersion"^|findstr "Java7FamilyVersion"') do set instversion=%%c if not "%instversion%"=="1.%main%.0_%update%" goto install echo %date% %time:~0,8% - %computername% hat bereits %instversion% installiert >> %alllog% echo %date% %time:~0,8% - %computername% hat bereits %instversion% installiert >> %versionlog% goto end :install echo %date% %time:~0,8% - %computername% installiert >> %versionlog% REM .exe format: [version]u[update]-32/-64.exe, Beispiel: 7u45-32.exe, 7u45-64.exe start /w %wd%\%version%-32.exe /s WEB_JAVA=1 REBOOT=REALLYSUPPRESS /norestart REBOOT=SUPPRESS set javaEL32=%errorlevel% start /w %wd%\%version%-64.exe /s WEB_JAVA=1 REBOOT=REALLYSUPPRESS /norestart REBOOT=SUPPRESS set javaEL64=%errorlevel% REM 10 Sekunden Pause nach der Installation ping localhost -n 10 >> nul :verfication REM existieren die Java Reg-Keys nach der Installation? reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /f "%update%" /k set javaregEL32=%errorlevel% reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /f "%update%" /k set javaregEL64=%errorlevel% echo %date% %time:~0,8% - %computername%: %version%, install-errorlevel: 32: %javaEL32%, 64: %javaEL64%, regerrorlevel: 32: %javaregEL32%, 64: %javaregEL64% >> %alllog% echo %date% %time:~0,8% - %computername%: %version%, install-errorlevel: 32: %javaEL32%, 64: %javaEL64%, regerrorlevel: 32: %javaregEL32%, 64: %javaregEL64% >> %versionlog% REM Error-Handling, Reaktion auf die 3 häufigsten msiexec Fehlercodes if %javaEL32%==1618 goto retry REM msiexec process in use, installation already in progress if %javaEL32%==1602 goto retry REM user canceled installation if %javaEL32%==1603 goto retry REM fatal error, some use it for "already installed" (eg. java) if %javaEL64%==1618 goto retry REM msiexec process in use, installation already in progress if %javaEL64%==1602 goto retry REM user canceled installation if %javaEL64%==1603 goto retry REM fatal error, some use it for "already installed" (eg. java) if "%javaregEL32%%javaregEL64%"=="00" md %wd%\%version%\%computername% goto end :retry if %retry%==1 goto retryfailed echo %date% %time:~0,8% - %computername% hat nicht Errorlevel 00 erreicht, retry in 5min... >> %alllog% echo %date% %time:~0,8% - %computername% hat nicht Errorlevel 00 erreicht, retry in 5min... >> %versionlog% set retry=1 REM 5 Minuten warten ping localhost -n 300 > nul goto install :retryfailed echo _!_ %date% %time:~0,8% - %computername% hat die Installation abgebrochen, RETRY FAILED! >> %alllog% echo _!_ %date% %time:~0,8% - %computername% hat die Installation abgebrochen, RETRY FAILED! >> %versionlog% goto end :end endlocal
Erläuterung:
Wichtig sind die Zeilen 10 und 11. Hier tragt ihr bitte die Java Version ein. Hauptversionsnummer, getrennt von der Updatenummer. Die .exe Installer dieser Version müssen folgendermaßen umbenannt werden: [Hauptversion]u[Update]-[bit].exe, also 7u40-32.exe und 7u40-64.exe für die aktuelle Java Version 7 Update 40.
Nach dem Clientfilter in Zeile 15-20 wird in Zeile 23 nach dem complete Ordner geschaut. Existiert dieser, wird das Script übersprungen.
In Zeile 25 wird ein Unterordner für das zu verteilnde Update erstellt, falls dieser noch nicht existiert. In diesem werden seperat eine Logdatei und complete Ordner erstellt. Eine Logdatei im Hauptverzeichnis enthält alle Installation aller Updates, die Logdatei im Unterverzeichnis des Updates enthält natürlich nur alle Installation dieser einen Update Version.
Dann werden beide Java Versionen in den Zeilen 31-34 installiert und die Errorlevel gespeichert.
Nach einer 10 Sekunden Pause (Zeile 36) wird anhand der Registry überprüft, ob die Java Installationen erfolgreich durchgelaufen sind. Alle Errorlevel werden in Zeile 44/45 zusammen mit einigen Informationen in beide Logdateien geschrieben.
Die Zeilen 47-65 realisieren einen Neuversuch der Installation, sollte bei der Installation einer der beiden Java Bit-Versionen einer der 3 häufigsten Fehlercodes 1618, 1602 oder 1603 aufgetreten sein. In diesem Fall wartet das Script 5 Minuten und unternimmt dann einen weiteren Versuch ab der Sprungmarke install
. Sollte dieser erste Neuversuch ebenfalls scheitern, wird das mit Zeile 64 entsprechend auffällig in der Logdatei vermerkt.
Eigentlich ganz verständlich glaube ich. Bei Fragen, schreibt mir.