Jedes Mal, wenn Windows Update einen neuen Suchvorgang startet, protokolliert es alle Schritte. Bis Windows 8 fand das in der Datei WindowsUpdate.log im  %windir% statt, aber unter Windows 10 hat Microsoft diese Datei durch ein Ereignisprotokoll ersetzt. Prinzipiell ist die Idee gut, nur dummerweise loggt der Update-Dienst dort nicht im Klartext, so dass man mit den Daten nichts anfangen kann. Stattdessen muß man sich mit Powershell aus diesem Log wieder eine Log-Datei erzeugen lassen. Dies geschieht mit dem Cmdlet Get-WindowsUpdatelog. Gibt man zusätlich den Parameter -LogPath an, kann man festlegen, wohin das Log-File geschrieben wird. Standardmäßig wird die Datei auf dem Desktop des Users abgelegt.

Get-WindowsUpdateLog -LogPath c:\Temp\WindowsUpdate.log

Achten Sie darauf, den Dateinamen mit anzugeben. Das Cmdlet läuft sonst trotzdem durch, erzeugt aber keine Datei!

Die Datei wird sehr lang und ist nicht so einfach zu analysieren. Zum Glück kommt einem Powershell hier zur Hilfe. Ich habe eine kleine Funktion geschrieben, die mit Hilfe eines regulären Ausdrucks die Daten in Powershell-Objekte umwandelt, so dass die Daten z.B. in einem Gridview weiter analysiert werden können.

Function Show-UpdateLog {
param(
    [Parameter(Mandatory=$true)]
    $LogPath
)

    $UpdateLogEntry = '((?:[\w.:-]+\s*){2})(\d+\s+)(\d+\s+)(\w+)\s+(.*)'
    $Log = Get-Content -Path $LogPath

    Foreach ( $line in $Log ) {
        $null = $line -match $UpdateLogEntry
        [PsCustomObject]@{
            Datetime = $Matches[1]
            ProcessID = $Matches[2]
            ThreadID = $Matches[3]
            Komponente = $Matches[4]
            Message = $Matches[5]
        }
    }
}

Einen ausführlichen Artikel zur Updatelog-Analyse finden Sie bei Microsoft unter https://docs.microsoft.com/de-de/windows/deployment/update/windows-update-logs.