Windows Defender Updates per WindowsUpdate API installieren

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung vorhanden)
Loading...

Wir standen vor der Herausforderung, dass es Systeme bei unseren Kunden gibt, welche zwar Windows Updates herunterladen dürfen, diese aber erst nach Prüfung installiert werden. Bis Windows 10 wurden die Windows Defender Updates unabhängig von der Windows Update Einstellung installiert. Mit Windows 10 ist das jetzt anders, d.h. auch die Defender Updates werden nur heruntergeladen aber nicht installiert.

Lange haben wir nach einer passenden Lösung gesucht -> und gefunden. Wir setzen jetzt auf ein Windows Powershell Modul, ein kleines Script sowie die Windows Aufgabenplanung.

Das Modul nennt sich PSWindowsUpdate und kann via folgendem Befehl installiert werden:
Öffnen Sie eine Powershell mit Adminrechten, geben Sie dann folgenden Befehl ein:

Install-Module -Name PSWindowsUpdate

Es wird nun gefragt, ob Sie das Modul installieren wollen, weiterhin ist noch ein Zusatzmodul NuGet provider benötigt. Alle Details zu dem Zusatzmodul finden Sie hier. Bestätigen Sie beide Nachfragen jeweils mit y.

Nun muss die ExecutionPolicy noch angepasst werden:

Set-ExecutionPolicy RemoteSigned

Damit sind alle Vorbereitungen abgeschlossen. Speichern Sie folgendes Skript als Powershell Skript ab:

$basePath = "C:\Users\User1\Downloads\DefenderWsusUpdater"
$pidFile = "$basePath\defenderUpdateTool.pid"
$logFile = "$basePath\defenderUpdate.log"
 
$date = Get-Date
 
If (Test-Path $pidFile){
  # // File exists
  $id = Get-Content -Path $pidFile
  Stop-Process -id $id -Force
 
    while ($true)
    {
      Try {
            [IO.File]::OpenWrite($pidFile).close()
            echo "[$date] Process $id kill" >> $logFile
            Break
          }
 
        Catch {}
     }
  del $pidFile
}
 
echo "[$date] Process $pid successfully started" >> $logFile
 
echo $pid > $pidFile
 
Get-WUInstall -title "Windows Defender" -AcceptAll -verbose >> $logFile
 
C:\Windows\System32\wuauclt.exe /reportnow
 
del $pidFile
 
echo "[$date] Process $pid successfully finished" >> $logFile

Hier gilt es anzumerken, über die API bleibt das Installieren von Windows Defender Updates regelmäßig hängen und das Script beendet sich nicht. Hierfür habe ich bis heute keine Lösung gefunden, daher beendet das Script beim erneuten Start automatisch den Vorgängerlauf. Spannend, trotz des Hängenbleibens wird das Update aber fertig installiert.

Das Skript können Sie jetzt in der Powershell schon einmal manuell an der Konsole starten, es sollte ein Logfile angelegt werden und Sie sehen eine Ausgabe in der Konsole. Im nächsten Schritt werden wir dies noch automatisieren.

Öffnen Sie dazu den Aufgabenplaner und legen eine neue Aufgabe an. Ich empfehle den Task als Administrator ausführen zu lassen, Unabhängig von der Benutzeranmeldung und auf höchsten Berechtigungen.
Den Trigger konfigurieren Sie wie folgt:

Aufgabenplaner Trigger

Als Aktion fügen Sie einen Programmstart hinzu: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe mit den folgenden Argumenten: -command „C:\Users\User1\Downloads\DefenderWsusUpdater\installWindowsDefenderUpdates.ps1“.

Letzter wichtiger Schritt, auf dem Reiter Einstellungen müssen Sie ganz unten die Regel, falls die Aufgabe bereits ausgeführt wird anpassen auf: Neue Instanz parallel ausführen

Wir nutzen das Script in Verbindung mit einem lokalen WSUS, welcher alle 4 Stunden nach neuen Updates sucht. Das Script funktioniert aber auch Problemlos wenn kein eigener WSUS betrieben wird.

WSUS: Windows 10 Anniversary Update 1607 lädt nicht herunter

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (2 Stimmen, Durchschnitt: 5,00 von 5)
Loading...

Wir betreiben bei unseren Kunden u.a. auch WSUS Server (Windows Update Server), seit 16.08. wird darüber auch das Windows 10 Anniversary Update 1607 verteilt. Leider brach der Download regelmäßig auf den Clients ab. Im Report des WSUS Servers konnten wir diese Fehlermeldung finden:

Das folgende Update konnte wegen des Fehlers 0x8024200d nicht installiert werden

In diesem Fall handelt es sich um ein Windows Server 2012 Standard. Vorraussetzung damit das Update grundsätzlich funktioniert, ist das Update KB3095113 für den WSUS Server. Dies war hier aber bereits installiert.

Dieser Fehler weißt im Regelfall auf ein Download/Zugriffsproblem hin. Die Suche nach der Ursache gestaltete sich extrem schwierig. In der Umgebung beim Kunden setzen wir mehrere PC-Gruppen ein, u.a. auch eine PreLive Gruppe auf der wir große Updates verproben. Der erste Ansatz, es ist ein Client Problem und auf anderen PCs funktioniert es, war nicht der richtige Weg, denn auch dort funktionierte es nicht. Nach stundenlangem Durchsuchen der Client-Logs konnten wir dort keinen Fehler erkennen, auch die WSUS Logs sahen sauber aus.

Da der gesamte WSUS Inhalt per IIS durchs Netzwerk gestreamed wird, haben wir uns dann die IIS Logs (c:\inetpub\logs\LogFiles) angesehen, dort konnten wir feststellen, dass die *.esd Dateien aus dem Update nicht gefunden wurden und ein 404 Fehler geworfen wurde:

HEAD /Content/A5/97864A30A8060D33CDE0C31801B38432085BE8A5.esd - 8530 - *********** Microsoft-Delivery-Optimization/10.0 - 404 3 50 1

Weitere Recherchen haben ergeben, dass dem IIS scheinbar ein MIME Type dafür fehlt. Über die Serververwaltungstools haben wir nun in der IIS-Administration -> MIME-Typ -> einen neuen Mime-Type hinzugefügt:

.esd
application/octet-stream

Sofort funktionierte nun der Download via WSUS.