.NET Framework 4.5 Batch Installationsscript

Heute in der Firma zusammengetippt, getestet, läuft bisher an 2 Test-PCs und wird in naher Zukunft verteilt.
Für alle, die es interessiert und natürlich für hilfreiches Feedback, was man verbessern könnte.

Mein .NET Framework 4.5 Deployment Batch Script:

Color 9f
@echo on
title Installiere .NET Framework 4.5...
setlocal

:: dotnet45-installer.bat
:: Installiert .NET Framework 4.5 silent mit Logging
:: Hannes Schurig	- 11.09.2012
:: Letzte Änderung	- Version 0.4 am 11.09.2012

set wd=\\server\dotNET_Framework\45
set log=\\server\dotNET_Framework\45\log.txt

:checkversion
REM prüfe ob .NET 4.5 schon installiert ist
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" /v "Version"^|findstr "Version"') do set netversion=%%c
if not %netversion:~0,3%==4.5 goto install
echo %date% %time:~0,5% - %computername% hat schon >> %log%
goto end

:install
%wd%\dotnetfx45_full_x86_x64.exe /passive /log "%wd%\logs\%computername%.txt" /norestart
set netinstallerrlvl=%errorlevel%
if not %netinstallerrlvl%==0 goto fehler

:checkinstallation
REM überprüfe ob die Installation erfolgreich war
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" /v "Version"^|findstr "Version"') do set newnetversion=%%c
if not %newnetversion:~0,3%==4.5 set netinstallerrlvl=99 & goto fehler
if %newnetversion:~0,3%==4.5 echo %date% %time:~0,5% - %computername% hat erfolgreich Version %netversion% installiert >> %log%
goto end

:fehler
REM Return Codes: http://msdn.microsoft.com/en-us/library/ee942965.aspx
if %netinstallerrlvl%==1602 echo echo %date% %time:~0,5% - %computername% FEHLER: Benutzer hat die Installation abgebrochen >> %log%
if %netinstallerrlvl%==1603 echo echo %date% %time:~0,5% - %computername% FEHLER: Ein fataler Installationsfehler ist aufgetreten >> %log%
if %netinstallerrlvl%==1641 echo echo %date% %time:~0,5% - %computername% HINWEIS: Installation erfolgreich aber Neustart notwendig >> %log%
if %netinstallerrlvl%==3010 echo echo %date% %time:~0,5% - %computername% HINWEIS: Installation erfolgreich aber Neustart notwendig >> %log%
if %netinstallerrlvl%==5100 echo echo %date% %time:~0,5% - %computername% FEHLER: Das System entspricht nicht den Anforderungen >> %log%
if %netinstallerrlvl%==99 echo echo %date% %time:~0,5% - %computername% FEHLER: Installationserrorlevel 0 aber erneute Registryprüfung gibt nicht Version 4.5 zurück. Ungewöhnlicher Fall, Überprüfung notwendig >> %log%
goto end

:end
endlocal

Ausgabe in der log.txt ist dann sowas:
11.09.2012 16:40 – IQB177 hat erfolgreich Version 4.5.50709 installiert

Ich benutze momentan noch den Parameter

/passive

, welcher zwar eine GUI anzeigt aber keine Nutzerinteraktion zulässt. Dadurch erfährt aber der Benutzer zumindest den aktuellen Status und Fortschritt der Installation. Vielleicht wechsel ich noch zu

/q

, wo keinerlei GUI zu sehen ist, absolut unsichtbar.

via: .NET Versionsnummern, .NET Framework 4 Deployment, .NET Framework 4 Allgemein

5 Kommentare

  1. Achtung bei der Versionsüberprüfung mit Hilfe von Strings, das ist an sich sehr unflexibel mit Batch Mitteln.
    In diesem Script verwende ich noch die Überprüfung:

    if not %version:~0,3%==4.5

    Die Installation von .NET 4.5 wird also getriggert wenn keine, eine ältere und auch eine neuere Installation von .NET gefunden wurde. Das sollte keine allzu großen Probleme machen, da msiexec das erkennen würde, jedoch verwende ich schon lange ein kleines Tool von einem ehemaligen Arbeitskollegen für die Versionsvergleiche:
    versioncompare.exe
    Das Programm bekommt 2 Parameter (2 Versionsnummern) und vergleicht diese etwas intelligenter als Batch. Der Rückgabewert zeigt dann ab, ob die erste Versionsnummer größer, gleich oder kleiner ist als die zweite.
    Beispiel:

    VersionCompare 1.2.1 9.999.999
    ExitCode: -1

    heißt: erste Version ist kleiner als die zweite.

    VersionCompare 10.0.0 9.999.999.999
    ExitCode: 1

    heißt: erste Version ist größer

    Ich würde nach dem Filtern der Version (dafür verwende ich immernoch die Registry oder sysinternals‘ sigcheck) immer diese Methode bevorzugen um Versionen abzugleichen.

Schreibe einen Kommentar