{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreial7cyrm3bhogv7tdsgms7buiwajimejiikhutl2s2pur7dbipjh4",
    "uri": "at://did:plc:nkxz2ojdvmieg2nhphvputvp/app.bsky.feed.post/3mmmosphskyd2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreid3o2ylpfjxwwasonfvg67bml7xpqsd3344wpifwsktuub2upq2yq"
    },
    "mimeType": "image/png",
    "size": 1086602
  },
  "description": "WSUS laeuft nie dauerhaft ohne Pflege. PowerShell und SQL gegen Timeouts, Platten-Fresser und haengende Serverbereinigung. Treiberupdates raus, abgelehnte Updates loeschen, SUSDB shrinken, IIS-Pool tunen und zuletzt die Indexe neu aufbauen.",
  "path": "/2020/08/24/wsus-bereinigung-timeout-und-platte-laeuft-mit-updates-voll/",
  "publishedAt": "2026-05-24T19:22:43.000Z",
  "site": "https://www.kernel-error.de",
  "tags": [
    "Hardening",
    "InfoSec",
    "Microsoft",
    "PowerShell",
    "Sysadmin",
    "Windows",
    "WSUS",
    "Einfach melden.",
    "Windows Server Backup mit Nagios",
    "@localUpdateID",
    "@var1",
    "@curitem",
    "@totaltodelete",
    "@FETCH_STATUS"
  ],
  "textContent": "Pfffff… Einen dauerhaft richtig gut laufenden WSUS Server habe ich tatsächlich noch nie gesehen. Irgendwann werden die Dinger langsam, dann gibt es Timeouts, die Serverbereinigung läuft nicht mehr durch und die Platten laufen voll. WSUS ist kein Dienst, den man einmal konfiguriert und dann läuft er. WSUS möchte dauerhaft Aufmerksamkeit. Was mir dabei so aufgefallen ist, möchte ich hier teilen.\n\n### Keine Treiberupdates über WSUS\n\n**Nie Treiberupdates über WSUS verteilen.** Hier explodiert der Platzverbrauch. Falls aktiviert: Über `Optionen → Produkte und Klassifizierungen → Klassifizierungen` den Haken bei „Treiber“ entfernen. Dann unter `Updates → Alle Updates` die Dropdown-Menüs auf „Genehmigung: Genehmigt“ und „Status: Alle“ setzen, nach Klassifizierung sortieren und alle Treiberupdates ablehnen.\n\n### Abgelehnte Updates löschen\n\nAbgelehnte Updates belegen weiterhin Plattenplatz, bis sie aktiv gelöscht werden. Dieses PowerShell-Script räumt sie weg — es läuft eine Weile, schafft aber viel Platz:\n\n\n    [reflection.assembly]::LoadWithPartialName(\"Microsoft.UpdateServices.Administration\")\n    $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();\n    $wsus.GetUpdates() | Where {$_.IsDeclined -eq $true} | ForEach-Object {\n        $wsus.DeleteUpdate($_.Id.UpdateId.ToString())\n        Write-Host $_.Title removed\n    }\n\n### Serverbereinigung automatisieren\n\nDer „Assistent für die Serverbereinigung“ löscht überflüssige Updates — abgelehnte, ersetzte und nicht mehr benötigte. Man sollte ihn regelmäßig laufen lassen, aber er lässt sich nicht direkt automatisieren. Dafür braucht man ein PowerShell-Script, das man per Aufgabenplanung täglich ausführt:\n\n\n    # Variablen\n    $DateFormat = Get-Date -format yyyyMMdd-HH-mm\n    $Logfile = \"H:\\Logs\\wsus-bereinigung-$DateFormat.log\"\n\n    # WSUS Bereinigung durchführen\n    Invoke-WsusServerCleanup -CleanupObsoleteUpdates `\n        -CleanupUnneededContentFiles -CompressUpdates `\n        -DeclineExpiredUpdates -DeclineSupersededUpdates `\n        | Out-File $Logfile\n\n    # Status-Mail versenden\n    $MailBody = Get-Content $Logfile | Out-String\n    Send-MailMessage -SmtpServer \"smtp.example.de\" `\n        -From \"wsus@example.de\" -To \"admin@example.de\" `\n        -Subject \"${env:COMPUTERNAME} Bereinigung $DateFormat\" `\n        -Body $MailBody -Encoding Unicode\n\n### IIS-Einstellungen bei Timeouts\n\nWenn die WSUS-Konsole oder Bereinigung mit Timeouts abbricht, hilft es oft, dem WsusPool im IIS mehr Ressourcen zu geben:\n\n`IIS-Manager → Anwendungspools → WsusPool → Erweiterte Einstellungen`\n\n  * Limit für den privaten Speicher (KB): **6000000**\n  * Maximale Anzahl von Arbeitsprozessen: **0**\n  * Startmodus: **AlwaysRunning**\n\n\n\nDanach den IIS neu starten — oder besser gleich den ganzen Server, es ist ja ein Windows.\n\n### SUSDB-Datenbank warten\n\nMit dem SQL Server Management Studio zur Windows Internal Database verbinden: `\\\\.\\pipe\\MICROSOFT##WID\\tsql\\query`\n\n**Compatibility Level anheben:** `Databases → SUSDB → Properties → Options → Compatibility level: SQL Server 2012 (110)`\n\n**Datenbank verkleinern:** `Databases → SUSDB → Tasks → Shrink → Database`\n\n**Synchronisierungshistorie aufräumen:**\n\n\n    USE SUSDB\n    GO\n    DELETE FROM tbEventInstance\n    WHERE EventNamespaceID = '2'\n      AND EVENTID IN ('381', '382', '384', '386', '387', '389')\n\n### Wenn die Bereinigung hängen bleibt\n\nManchmal bleibt die Serverbereinigung an einem bestimmten Update hängen. Dann hilft es, das erste Update in der „zu löschen“-Liste von Hand zu entfernen:\n\n\n    USE SUSDB\n    GO\n    -- Erste Update-ID ermitteln\n    exec spGetObsoleteUpdatesToCleanup\n    -- ID notieren und löschen\n    exec spDeleteUpdate @localUpdateID=HIER_UPDATE_ID\n\nWenn auch das nicht reicht, kann man alle obsoleten Updates in einer Schleife löschen — das läuft lange, räumt aber zuverlässig auf:\n\n\n    USE SUSDB\n    DECLARE @var1 INT, @curitem INT, @totaltodelete INT\n    CREATE TABLE #results (Col1 INT)\n    INSERT INTO #results(Col1) EXEC spGetObsoleteUpdatesToCleanup\n    SET @totaltodelete = (SELECT COUNT(*) FROM #results)\n    SELECT @curitem = 1\n\n    DECLARE WC Cursor FOR SELECT Col1 FROM #results\n    OPEN WC\n    FETCH NEXT FROM WC INTO @var1\n    WHILE (@@FETCH_STATUS > -1)\n    BEGIN\n        RAISERROR('%d/%d: Deleting %d', 0, 1, @curitem, @totaltodelete, @var1) WITH NOWAIT\n        EXEC spDeleteUpdate @localUpdateID=@var1\n        SET @curitem = @curitem + 1\n        FETCH NEXT FROM WC INTO @var1\n    END\n    CLOSE WC\n    DEALLOCATE WC\n    DROP TABLE #results\n\nAbschließend die Indexe der SUSDB neu aufbauen — das beschleunigt danach alles spürbar. Microsoft hatte dafür ein Script in der TechNet Gallery veröffentlicht. Die Gallery ist inzwischen offline, aber das Script findet sich als `WsusDBMaintenance.sql` in diversen Microsoft-Docs-Artikeln. Im Kern macht es nichts anderes als fragmentierte Indexe zu erkennen und per `ALTER INDEX REBUILD` oder `REORGANIZE` zu reparieren, gefolgt von `sp_updatestats`.\n\nMeist hilft eine Kombination aus mehreren dieser Maßnahmen. Bisher hat mir immer irgendetwas davon geholfen — auch wenn ich dafür einige Zeit in Suchmaschinen verschwenden musste. Fragen? Einfach melden.\n\nSiehe auch: Windows Server Backup mit Nagios",
  "title": "WSUS-Bereinigung: Timeouts beheben und Speicherplatz freigeben"
}