Quantcast
Channel: IT-Stack.de
Viewing all articles
Browse latest Browse all 241

scriptbasiertes Java Deployment im AD – flexibel erweiterbar, Logging, Retry

$
0
0

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

java deployment working dir neu scriptbasiertes Java Deployment im AD   flexibel erweiterbar, Logging, Retry
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.


Viewing all articles
Browse latest Browse all 241

Trending Articles