ForceWSUS.cmd

::::::::::::::::::::::::::::::::::::::::::::
:: forceWSUS.cmd
:: Wolfgang Führer
:: 12.12.2007
::::::::::::::::::::::::::::::::::::::::::::
@echo off
color 71
 
:: hier bitte variablen des WSUS Servers definieren!
set SERVER=servername
set PORT=portnummer
 
call :maketime & title WSUS Integration - Start %zeit%
echo WSUS Integration
echo ----------------
echo.
 
:: Zuerst wird der WSUS Client installiert
 
call :maketime & echo %zeit% Installiere WSUS Client ...
start /wait WindowsUpdateAgent30-x86.exe /wuforce /quiet
ping 127.0.0.1 -n 30 >nul
call :maketime & echo %zeit% Installiere Pakethelfer ...
start /wait WindowsXP-KB898461-x86-ENU.exe /quiet /passive
ping 127.0.0.1 -n 30 >nul
call :maketime & echo %zeit% Schreibe Registry für Client ...
SET KEY=HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
:: User k”nnen Info-Balloons sehen
REG ADD "%KEY%" /v "ElevateNonAdmins"     /t REG_DWORD /d 1 /f   >nul
:: greift nur wenn in WSUS eingeschaltet
REG ADD "%KEY%" /v "TargetGroup"          /t REG_SZ    /d "XP" /f   >nul
:: greift nur wenn in WSUS eingeschaltet
REG ADD "%KEY%" /v "TargetGroupEnabled"   /t REG_DWORD /d 1 /f   >nul
:: WSUS Server mit Port
REG ADD "%KEY%" /v "WUServer"             /t REG_SZ    /d "http://%SERVER%:%PORT%" /f   >nul
:: WSUS Server mit Port
REG ADD "%KEY%" /v "WUStatusServer"       /t REG_SZ    /d "http://%SERVER%:%PORT%" /f   >nul
SET KEY=HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\AU
:: 4 = automatisch herunterladen und installieren
REG ADD "%KEY%" /v "AUOptions"                     /t REG_DWORD /d 4   /f   >nul
REG ADD "%KEY%" /v "AUPowerManagement"             /t REG_DWORD /d 0   /f   >nul
REG ADD "%KEY%" /v "AutoInstallMinorUpdates"       /t REG_DWORD /d 1   /f   >nul
:: 12 = jede Stunde
REG ADD "%KEY%" /v "DetectionFrequency"            /t REG_DWORD /d 12  /f   >nul
:: 1 = eingeschaltet
REG ADD "%KEY%" /v "DetectionFrequencyEnabled"     /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "DetectionStartTime"            /t REG_SZ    /d "-" /f   >nul
REG ADD "%KEY%" /v "IncludeRecommendedUpdates"     /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "LastWaitTimeout"               /t REG_SZ    /d "-" /f   >nul
:: 0 = Autoreboot 1 = vor Reboot fragen
REG ADD "%KEY%" /v "NoAutoRebootWithLoggedOnUsers" /t REG_DWORD /d 0   /f   >nul
:: 0 = Automatisch updaten einschalten
REG ADD "%KEY%" /v "NoAutoUpdate"                  /t REG_DWORD /d 0   /f   >nul
REG ADD "%KEY%" /v "RebootRelaunchTimeout"         /t REG_DWORD /d 2   /f   >nul
REG ADD "%KEY%" /v "RebootRelaunchTimeoutEnabled"  /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "RebootWarningTimeout"          /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "RebootWarningTimeoutEnabled"   /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "RescheduleWaitTime"            /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "RescheduleWaitTimeEnabled"     /t REG_DWORD /d 1   /f   >nul
:: 0 = jeden Tag
REG ADD "%KEY%" /v "ScheduledInstallDay"           /t REG_DWORD /d 0   /f   >nul
:: n„chste Installzeit auf 0 Uhr
REG ADD "%KEY%" /v "ScheduledInstallTime"          /t REG_DWORD /d 0  /f   >nul
:: 1 = WSUS benutzen
REG ADD "%KEY%" /v "UseWUServer"                   /t REG_DWORD /d 1   /f   >nul
 
call :maketime & echo %zeit% Melde Client an WSUS an ...
start /wait wuauclt.exe /resetauthorization /detectnow
ping 127.0.0.1 -n 180 >nul
call :maketime & echo %zeit% Report an WSUS schicken ...
start /wait wuauclt.exe /r
ping 127.0.0.1 -n 60 >nul
 
:: Soweit die Installation des WSUS Client
:: Jetzt beschleunigen wir die Sache
 
set x=0
:loop
set /a x="x+1"
echo Loop %x%/5
call :maketime & echo %zeit% Setze Registry für sofortigen Download von Patchen ...
SET KEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update
REG ADD "%KEY%" /v "ResetAU"                /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "ConfigVer"              /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "NextDetectionTime"      /t REG_SZ    /d "2006-01-01 00:00:00"   /f   >nul
:: Dieser Wert ist wichtig damit Installation sofort startet
REG ADD "%KEY%" /v "ScheduledInstallDate"   /t REG_SZ    /d "2006-01-01 00:00:00"   /f   >nul
call :maketime & echo %zeit% Starte WSUS Service durch ...
start /wait net stop wuauserv
start /wait net start wuauserv
call :maketime & echo %zeit% 5 Minuten Pause für Downloads ...
:: Je nach Netz anpassen.
:: 500 MB (ca. 80 Patche) bei 100Mbit sind ca. 1 Minute
ping 127.0.0.1 -n 300 >nul
echo ........ Nun sollten die Patche heruntergeladen sein.
echo ........ -^> C:\Windows\SoftwareDistribution\Download\
call :maketime & echo %zeit% Setze Registry fr sofortige Installation ...
SET KEY=HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\AU
:: 1. Block kann wegfallen wenn oben gesetzt
:: 4 = automatisch herunterladen und installieren 
REG ADD "%KEY%" /v "AUOptions"                     /t REG_DWORD /d 4   /f   >nul
REG ADD "%KEY%" /v "RebootWarningTimeout"          /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "RebootWarningTimeoutEnabled"   /t REG_DWORD /d 1   /f   >nul
:: 0 = Autoreboot 1 = vor Reboot fragen
REG ADD "%KEY%" /v "NoAutoRebootWithLoggedOnUsers" /t REG_DWORD /d 0   /f   >nul
SET KEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update
REG ADD "%KEY%" /v "ResetAU"                /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "ConfigVer"              /t REG_DWORD /d 1   /f   >nul
REG ADD "%KEY%" /v "NextDetectionTime"      /t REG_SZ    /d "2006-01-01 00:00:00"   /f   >nul
:: Dieser Wert ist wichtig damit Installation sofort startet
REG ADD "%KEY%" /v "ScheduledInstallDate"   /t REG_SZ    /d "2006-01-01 00:00:00"   /f   >nul
SET KEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Detect
REG ADD "%KEY%" /v "LastSuccessTime"        /t REG_SZ    /d "2006-01-01 00:00:00"   /f   >nul
REG ADD "%KEY%" /v "LastError"              /t REG_DWORD /d 0   /f   >nul
SET KEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Download
REG ADD "%KEY%" /v "LastSuccessTime"        /t REG_SZ    /d "2006-01-01 00:00:00"   /f   >nul
REG ADD "%KEY%" /v "LastError"              /t REG_DWORD /d 0   /f   >nul
SET KEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install
REG ADD "%KEY%" /v "LastSuccessTime"        /t REG_SZ    /d "2006-01-01 00:00:00"   /f   >nul
REG ADD "%KEY%" /v "LastError"              /t REG_DWORD /d 0   /f   >nul
 
call :maketime & echo %zeit% Starte WSUS Service durch ...
start /wait net stop wuauserv
start /wait net start wuauserv
echo.
echo ---------------------------------------------
echo Nun sollten die Patche installiert werden ...
echo ---------------------------------------------
start /wait taskkill /im ShowUpdates.exe
ping 127.0.0.1 >nul
start ShowUpdates.exe
echo.
:: falls die zeiten zu kurz waren nach 15 min erneute schleife
:: reboot nach patchinstallation beendet schleife
ping 127.0.0.1 -n 900 >nul
if %x% LSS 5 goto loop
:: abbruch nach 5 versuchen
echo Es wurden keine Patche installiert!
echo.
pause
 
::ohne reboot könnte man so beenden:
::echo Nach einem Tastendruck wird erneut ein Report an WSUS geschickt ...
::pause
::call :maketime & echo %zeit% Report erneut an WSUS schicken ...
::start /wait wuauclt.exe /r
 
exit
 
:maketime
:: ordentlichen zeitstempel generieren
:: geht bei deutschem und englischem windows
if "%date:~6,1%"=="/" (
set y=%date:~12,2%
set m=%date:~4,2%
set d=%date:~7,2%
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
) else (
if "%date:~2,1%"=="." (
set y=%date:~8,2%
set m=%date:~3,2%
set d=%date:~0,2%
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
) else (
set y=%date:~11,2%
set m=%date:~6,2%
set d=%date:~3,2%
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
)
)
set zeit=%hh%:%mm%:%ss%
goto:eof

Kommentare

Reg-Key "NoAutoRebootWithLoggedOnUsers"

Nach Abschluss des Scripts bleibt der Reg-Key "NoAutoRebootWithLoggedOnUsers" auf "0", so dass nach Installation der Patches auf jeden Fall ein Reboot erfolgt, auch wenn ein Benutzer angemeldet ist. Ist das so gewollt? Sollte dieser Wert nicht am Schluss wieder auf "1" gesetzt werden, so dass der Benutzer darauf Einfluss hat?

Das ist natürlich richtig. Bei mir folgt danach die automatische Softwareinstallation und ein 2. Patchzyklus, so das ich diesen Wert auf 0 gelassen habe. 

Reg-Key "AutoInstallMinorUpdate"

Heisst der Reg-Key nun "AutoInstallMinorUpdate" oder "AutoInstallMinorUpdates", also hängt hinten ein "s" an? Microsoft sagt "AutoInstallMinorUpdates", im Script steht aber "AutoInstallMinorUpdate".

Das ist ein Tippfehler von mir. Danke für den Hinweis. Habe ich im Script gefixt. 

sorry

Unter diesem Abschnitt hab ich vergessen dazuzuschreiben Setze Registry für sofortigen Download von Patchen ...

 Danke für den Hinweis. Habe ich gefixt ...

Fehler in einer Zeile

Hallo ich habe in dem Skript einen kleinen Fhler entdeckt.

Und zwar diesen hier:

SET KEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update

am Ende ist ein Leerzeichen sodass der Registrykey nicht richtig gesetzt wird "Auto Update "