Das Problem kennt denke ich jeder. Die Windows Installation ist abgeschlossen aber die Windows Updates lassen sich nicht automatisch direkt im Anschluss installieren.
Mit diesem Script wird Windows Update gezwungen eine sofortige Prüfung auf Updates durchzuführen, die Updates herunterzuladen und zu installieren.
Außerdem wird vom WSUS abgefragt wie viele Updates für diesen Rechner noch ausstehen.
Da Windows zwischen den Updates Reboots benötigt wird dieser Status an WINST übergeben und der Rechner solange neu gestartet bis der Wert auf 0 Updates steht !
Da der Status vom WSUS abgefragt wird, wird ein WSUS benötigt (nur für die Statusabfrage!)
**Das Script befindet sich noch in der Testphase und __funktioniert noch nicht wirklich__ - über weitere Ideen und Verbesserungsvorschläge wäre ich sehr erfreut !**
** Mir fehlt die Möglichkeit abzufragen ob die Updates installiert wurden und der Rechner neugestartet werden muss ! Eventuell hat da ja jemand eine Idee **
WINST Script
[INITIAL]
DefStringList $counterString$
DefVar $CounterVar$
DefVar $TRIM$
[ACTIONS]
ShellInAnIcon_Forceupdates
ShellInAnIcon_Check
set $counterString$ = getOutStreamFromSection('ShellInAnIcon_check')
set $CounterVar$ = takeString(0,$CounterString$)
set $trim$ = trim($CounterVar$)
if $trim$ = "0"
comment "Keine Updates mehr Verfügbar"
else
ExitWindows /ImmediateReboot
comment weitere Updates verfügbar reboot wurde initialisiert !
endif
[shellInAnIcon_Check]
@echo off
Powershell %scriptpath%\check.ps1
@echo on
[ShellInAnIcon_Forceupdates]
regedit /s %scriptpath%\WSUS.reg
net stop wuauserv
REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v LastWaitTimeout /f
REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v DetectionStartTime /f
Reg Delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v NextDetectionTime /f
REG Delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v ScheduledInstallDate /f
REG Add "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v ScheduledInstallDate /f /d "2010-01-01 06:00:00"
net start wuauserv
wuauclt /detectnow
wuauclt /updatenow
check.ps1
$Session= New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$list = $Searcher.Search('IsInstalled = 0 and IsHidden = 0')
write-host $list.updates.count
TODO:
* Testen unter Windows 7 x64
* Maximale Anzahl von Reboots integrieren (zum Fehler abfangen und um eine Endlosschleife zu verhindern)
* Registry Anpassungen über WINST und nicht Batch durchführen
* Genauere Reports an Opsiconfd GUI
* Allgemeine Verbesserungen, Schalter für Autoupdates