6.6 KiB
Problembehandlung
PSWindowsUpdate-Modul lässt sich nicht laden
Symptom
[ERROR] Failed to load PSWindowsUpdate module from any source
Lösungen
Online-Installation schlägt fehl:
- Das Script setzt TLS 1.3 (bevorzugt) mit TLS 1.2 als Fallback. Auf älteren Systemen (z.B. Windows 10 ohne aktuelles .NET) wird TLS 1.3 ignoriert und TLS 1.2 genutzt. Aktiven Protokollstatus prüfen:
[Net.ServicePointManager]::SecurityProtocol - NuGet-Provider manuell installieren:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force - PSGallery als vertrauenswürdige Quelle setzen:
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted - Proxy prüfen (falls vorhanden):
[System.Net.WebRequest]::DefaultWebProxy
Offline-Fallback schlägt fehl:
- Prüfen ob der Ordner
Modules\PSWindowsUpdateim Script-Verzeichnis existiert - Prüfen ob die DLL-Datei vorhanden ist:
Modules\PSWindowsUpdate\2.2.1.2\PSWindowsUpdate.dll
Keine Updates gefunden
Mögliche Ursachen
-
WSUS blockiert Updates:
- Script zeigt "WSUS server detected" im Log
- WSUS-Server hat möglicherweise keine Updates freigegeben
- Lösung: WSUS-Administrator kontaktieren oder
UseMicrosoftUpdate = truesetzen (funktioniert nur ohne WSUS-GPO)
-
Windows Update Service gestoppt:
Get-Service wuauserv | Select-Object Status # Falls gestoppt: Start-Service wuauserv -
Updates bereits installiert:
- Das Script zeigt "No updates available" — alle Updates sind aktuell
E-Mail wird nicht gesendet
Checkliste
-
SMTP-Server erreichbar?
Test-NetConnection -ComputerName smtp.example.com -Port 587 -
Zugangsdaten korrekt? Im Log nach folgender Meldung suchen:
[WARN] Failed to send email: ... -
App-Passwort bei Gmail/Microsoft 365:
- Normales Passwort funktioniert oft nicht
- App-spezifisches Passwort in den Kontoeinstellungen erstellen
-
Firewall: Port 587 (oder 465/25) muss ausgehend offen sein
-
SSL/TLS:
SmtpUseSsl = truefür Port 587/465,falsefür Port 25 (lokal)
ntfy-Benachrichtigung kommt nicht an
Checkliste
-
Server erreichbar?
Invoke-RestMethod -Uri "https://ntfy.sh/test-topic" -Method Post -Body "Test" -
Topic korrekt? Topic-Name muss in Config und App identisch sein
-
Token korrekt? Falls Authentifizierung konfiguriert:
$headers = @{ "Authorization" = "Bearer tk_mein_token" } Invoke-RestMethod -Uri "https://ntfy.mein-server.de/test" -Method Post -Body "Test" -Headers $headers -
App abonniert? In der ntfy-App prüfen ob das Topic abonniert ist
Winget wird nicht erkannt
Auf Client-Systemen (Windows 10/11)
-
Winget installiert?
Get-Command winget # oder Get-AppxPackage -Name Microsoft.DesktopAppInstaller -
Winget aktualisieren:
- Microsoft Store öffnen → "App-Installer" aktualisieren
-
Im SYSTEM-Kontext: Winget ist eine per-User MSIX-App. Das Script versucht automatisch den Pfad über
Get-AppxPackage -AllUserszu finden.
Auf Server-Systemen
Winget ist auf Windows Server standardmäßig nicht verfügbar. Es kann manuell installiert werden:
- Aktuelle Version von GitHub herunterladen
.msixbundleinstallieren (erfordert ggf. zusätzliche Abhängigkeiten)
Das Script erkennt automatisch ob winget verfügbar ist und überspringt die Funktion wenn nicht.
ImportExcel / XLSX-Export funktioniert nicht
Symptom
[WARN] ImportExcel not available, falling back to CSV for history export
Lösungen
-
Manuell installieren:
Install-Module -Name ImportExcel -Force -Scope AllUsers -
Kein Internet: Das Script versucht automatisch das Modul zu installieren. Ohne Internet wird automatisch CSV als Fallback verwendet.
-
CSV statt XLSX: Funktioniert immer, keine zusätzlichen Module nötig. Die History-Datei wird dann als
.csvstatt.xlsxgespeichert.
Script bricht mit "must be run as Administrator" ab
Das Script erfordert Administrator-Rechte für:
- Installation von Windows Updates
- Installation von PowerShell-Modulen
- Zugriff auf Windows Update COM-Objekte
Lösung
- PowerShell als Administrator starten (Rechtsklick → "Als Administrator ausführen")
- In der Aufgabenplanung: "Mit höchsten Privilegien ausführen" aktivieren und als
SYSTEMausführen
Updates schlagen wiederholt fehl
Mögliche Ursachen
-
Speicherplatz: Windows Updates benötigen freien Speicher
Get-PSDrive C | Select-Object Used, Free -
Windows Update Komponenten zurücksetzen:
# PSWindowsUpdate bietet dafür ein Cmdlet Reset-WUComponents -Verbose -
Bestimmte KB ausschließen: Falls ein spezifisches Update immer fehlschlägt:
[WindowsUpdate] ExcludeKBs = KB1234567 -
Retry-Count erhöhen: Manchmal hilft ein weiterer Versuch:
[WindowsUpdate] RetryCount = 5
Log-Dateien werden nicht erstellt
-
Verzeichnis-Berechtigungen prüfen:
# SYSTEM muss Schreibrechte haben icacls "C:\logs\windows-updater" -
Verzeichnis erstellen:
New-Item -ItemType Directory -Path "C:\logs\windows-updater" -Force -
LogPath in config.ini prüfen — Pfad muss ohne Anführungszeichen angegeben werden
Hook-Scripts werden nicht ausgeführt
- Pfad korrekt? Absoluter Pfad verwenden, keine Umgebungsvariablen
- Script vorhanden?
Test-Pathauf den konfigurierten Pfad prüfen - Execution Policy: Hook-Scripts werden mit
-ExecutionPolicy Bypassaufgerufen - Exit-Code: Hook muss mit
exit 0enden für Erfolg, jeder andere Code gilt als Fehler
Allgemeine Diagnose
Log-Ausgabe im Detail prüfen
# Heutiges Log anzeigen
$today = Get-Date -Format "yyyy-MM-dd"
Get-Content "C:\logs\windows-updater\windows-updater_$today.log"
# Nach Fehlern suchen
Select-String -Path "C:\logs\windows-updater\windows-updater_*.log" -Pattern "\[ERROR\]"
Script manuell mit Ausgabe testen
# In einer Admin-PowerShell ausführen
powershell.exe -ExecutionPolicy Bypass -File "C:\scripts\windows-updater\windows-updater.ps1"
Dry-Run zum Testen
In config.ini setzen:
[General]
DryRun = true
Dies prüft alle Funktionen (Logging, Benachrichtigungen, Modulladung) ohne tatsächlich Updates zu installieren.