# Benachrichtigungen einrichten Das Script unterstützt drei unabhängige Benachrichtigungskanäle, die einzeln oder gleichzeitig genutzt werden können. ## ntfy [ntfy](https://ntfy.sh) ist ein einfacher Push-Notification-Dienst. Es kann die öffentliche Instanz (`ntfy.sh`) oder ein selbst gehosteter Server verwendet werden. ### Einrichtung 1. **Topic wählen** - Ein Topic-Name ist wie ein Kanal, auf den man Nachrichten sendet (z.B. `windows-updates-meinserver`) 2. **App installieren** (optional) - ntfy-App für [Android](https://play.google.com/store/apps/details?id=io.heckel.ntfy), [iOS](https://apps.apple.com/app/ntfy/id1625396347) oder [Web](https://ntfy.sh) öffnen und das Topic abonnieren 3. **Token erstellen** (optional) - Wenn der ntfy-Server Authentifizierung erfordert, einen Access Token erstellen 4. **Config anpassen:** ```ini [Notification] NtfyEnabled = true NtfyUrl = https://ntfy.sh NtfyTopic = windows-updates-meinserver NtfyToken = NtfyPriority = default ``` ### Prioritäten | Wert | Bedeutung | |---|---| | `min` | Keine Vibration, kein Sound | | `low` | Keine Vibration | | `default` | Standard-Verhalten | | `high` | Hohe Priorität mit Sound | | `urgent` | Höchste Priorität, durchbricht "Nicht stören" | Das Script verwendet automatisch `high` für Fehler und Reboot-Benachrichtigungen. ### Selbst gehosteter ntfy-Server Bei einem eigenen ntfy-Server die URL entsprechend anpassen: ```ini NtfyUrl = https://ntfy.mein-server.de NtfyToken = tk_mein_zugangstoken ``` ## E-Mail ### Einrichtung 1. **SMTP-Zugangsdaten beschaffen** - Diese bekommt man vom E-Mail-Provider oder dem eigenen Mailserver 2. **Config anpassen:** ```ini [Notification] EmailEnabled = true SmtpServer = smtp.example.com SmtpPort = 587 SmtpUseSsl = true SmtpUsername = user@example.com SmtpPassword = mein-passwort EmailFrom = updater@example.com EmailTo = admin@example.com EmailHtmlReport = true ``` ### Mehrere Empfänger Kommagetrennt in `EmailTo`: ```ini EmailTo = admin@example.com,ops@example.com,chef@example.com ``` ### HTML-Report Wenn `EmailHtmlReport = true` gesetzt ist, enthält die E-Mail nach der Update-Installation eine formatierte HTML-Tabelle mit: - Hostname und Betriebssystem - Datum und Uhrzeit - Anzahl erfolgreicher und fehlgeschlagener Updates - Tabelle mit allen Updates (KB, Titel, Größe, Ergebnis) - Farbcodierung: Grün für Erfolg, Rot für Fehler Bei `EmailHtmlReport = false` wird stattdessen eine einfache Text-E-Mail gesendet. ### Häufige SMTP-Einstellungen | Provider | Server | Port | SSL | |---|---|---|---| | Microsoft 365 | `smtp.office365.com` | 587 | true | | Gmail | `smtp.gmail.com` | 587 | true | | Eigener Server | `mail.example.com` | 587 oder 465 | true | | Lokaler Relay | `localhost` | 25 | false | **Hinweis:** Bei Gmail wird ein App-spezifisches Passwort benötigt, kein normales Kontopasswort. ### E-Mail ohne Authentifizierung Bei einem lokalen SMTP-Relay ohne Authentifizierung: ```ini SmtpServer = mailrelay.local SmtpPort = 25 SmtpUseSsl = false SmtpUsername = SmtpPassword = ``` ## Microsoft Teams ### Einrichtung Benachrichtigungen werden über einen Webhook an einen Teams-Kanal gesendet. Es werden [Adaptive Cards](https://adaptivecards.io/) verwendet, die eine übersichtliche Darstellung mit Update-Details bieten. #### Webhook erstellen (Workflows / Power Automate) Microsoft hat den klassischen *Incoming Webhook*-Connector in Teams abgekündigt. Neue Webhooks werden über **Workflows** erstellt: 1. Im gewünschten Teams-Kanal auf **⋯** → **Workflows** klicken 2. Die Vorlage **"Post to a channel when a webhook request is received"** auswählen 3. Dem Flow einen Namen geben und bestätigen 4. Die generierte Webhook-URL kopieren #### Webhook erstellen (klassischer Incoming Webhook-Connector) Falls der klassische Connector in der Organisation noch verfügbar ist: 1. Im gewünschten Teams-Kanal auf **⋯** → **Connectors** klicken 2. **Incoming Webhook** suchen und **Konfigurieren** klicken 3. Namen vergeben (z.B. "Windows Updater") und optional ein Icon hochladen 4. **Erstellen** klicken und die generierte Webhook-URL kopieren #### Config anpassen ```ini [Notification] TeamsEnabled = true TeamsWebhookUrl = https://xxxxx.webhook.office.com/webhookb2/... ``` ### Darstellung Die Teams-Benachrichtigung wird als Adaptive Card dargestellt und enthält: - Titel der Benachrichtigung (farblich hervorgehoben) - Hostname und Zeitstempel - Nachrichtentext - Bei Update-Berichten: Detailliste aller Updates mit Status-Icons (✅ Erfolg / ❌ Fehler) ## Benachrichtigungs-Ereignisse Das Script sendet Benachrichtigungen bei folgenden Ereignissen. Jedes Ereignis kann einzeln in der Sektion `[NotificationEvents]` der `config.ini` ein- oder ausgeschaltet werden. Standardmäßig sind alle Ereignisse aktiviert. ### Übersicht | Ereignis | Config-Schlüssel | Priorität | Subject-Muster | |---|---|---|---| | Scan-Fehler | `NotifyOnScanError` | high | `Scan Error - ` | | Modul-Fehler | `NotifyOnModuleError` | high | `Windows Update FAILED - ` | | Pre-Hook fehlgeschlagen | `NotifyOnHookFailure` | high | `Windows Update ABORTED - ` | | Keine Updates | `NotifyOnNoUpdates` | default | `No Updates - ` | | Dry-Run Report | `NotifyOnDryRun` | default | `Dry-Run Report - ` | | Update-Zusammenfassung | `NotifyOnUpdateComplete` | default/high | `Updates OK - ` oder `Updates (with errors) - ` | | Neustart wird ausgeführt | `NotifyOnReboot` | high | `Reboot - ` / `Reboot in X min - ` / `Reboot scheduled at HH:MM - ` | | Neustart erforderlich | `NotifyOnRebootRequired` | high | `Reboot Required - ` | | Dienst-Neustart fehlgeschlagen | `NotifyOnServiceRestartFailure` | high | `Service Restart FAILED - ` | ### Details zu jedem Ereignis #### Scan-Fehler (`NotifyOnScanError`) Der Windows-Update-Scan ist fehlgeschlagen (`Get-AvailableUpdates` hat `$null` zurückgegeben). Das Script bricht ab, es werden keine Updates installiert. - **Priorität:** high - **Subject:** `Scan Error - ` - **Inhalt:** Hinweis, dass der Update-Scan fehlgeschlagen ist #### Modul-Fehler (`NotifyOnModuleError`) Das PSWindowsUpdate-Modul konnte weder online (PSGallery) noch offline (lokaler Modules-Ordner) geladen werden. Das Script bricht ab, es werden keine Updates installiert. - **Priorität:** high - **Subject:** `Windows Update FAILED - ` - **Inhalt:** Fehlermeldung, dass das Modul nicht geladen werden konnte #### Pre-Hook fehlgeschlagen (`NotifyOnHookFailure`) Das in `[Hooks] PreUpdateScript` konfigurierte Script hat einen Exit-Code ≠ 0 zurückgegeben und `AbortOnPreHookFailure = true` ist gesetzt. Der Update-Prozess wird abgebrochen. - **Priorität:** high - **Subject:** `Windows Update ABORTED - ` - **Inhalt:** Exit-Code und Pfad des fehlgeschlagenen Hook-Scripts #### Keine Updates (`NotifyOnNoUpdates`) Der Update-Scan hat keine verfügbaren Windows-Updates gefunden. Das Script beendet sich regulär. - **Priorität:** default - **Subject:** `No Updates - ` - **Inhalt:** Hinweis, dass keine Updates verfügbar sind #### Dry-Run Report (`NotifyOnDryRun`) Im Dry-Run-Modus (`DryRun = true`) werden verfügbare Updates nur gemeldet, aber nicht installiert. - **Priorität:** default - **Subject:** `Dry-Run Report - ` - **Inhalt:** Liste aller verfügbaren Updates mit KB-Nummer, Titel und Größe #### Update-Zusammenfassung (`NotifyOnUpdateComplete`) Nach Abschluss der Update-Installation wird eine Zusammenfassung aller Ergebnisse gesendet. Die Priorität richtet sich danach, ob Fehler aufgetreten sind. - **Priorität:** default (alle erfolgreich) oder high (mindestens ein Fehler) - **Subject:** `Updates OK - ` oder `Updates (with errors) - ` - **Inhalt:** Hostname, Betriebssystem, Anzahl erfolgreicher/fehlgeschlagener Updates, Detail-Liste aller Updates. Per E-Mail optional als HTML-Report mit farbcodierter Tabelle (`EmailHtmlReport = true`). Per Teams als Adaptive Card mit Status-Icons. #### Neustart wird ausgeführt (`NotifyOnReboot`) Nach der Update-Installation ist ein Neustart erforderlich und `[Reboot] Enabled = true`. Je nach konfiguriertem Modus wird der Neustart sofort, verzögert oder zu einer festen Uhrzeit eingeleitet. - **Priorität:** high - **Subject:** `Reboot - ` (immediate) / `Reboot in X min - ` (delayed) / `Reboot scheduled at HH:MM - ` (scheduled) - **Inhalt:** Information über den Neustart-Zeitpunkt, inklusive Update-Details #### Neustart erforderlich (`NotifyOnRebootRequired`) Ein Neustart ist nach der Update-Installation nötig, aber der automatische Neustart ist deaktiviert (`[Reboot] Enabled = false`). Ein manueller Neustart ist erforderlich. - **Priorität:** high - **Subject:** `Reboot Required - ` - **Inhalt:** Hinweis, dass ein manueller Neustart durchgeführt werden muss #### Dienst-Neustart fehlgeschlagen (`NotifyOnServiceRestartFailure`) Der Service-Watchdog konnte einen oder mehrere konfigurierte Dienste nach den Updates nicht starten. Der Watchdog wird nur ausgeführt, wenn kein Neustart erforderlich ist (`[ServiceWatchdog] Enabled = true`). - **Priorität:** high - **Subject:** `Service Restart FAILED - ` - **Inhalt:** Liste der betroffenen Dienste mit Fehlerbeschreibung (Dienst nicht gefunden, alle Versuche fehlgeschlagen) ### Einzelne Ereignisse deaktivieren In der Sektion `[NotificationEvents]` der `config.ini` kann jedes Ereignis individuell gesteuert werden. Beispiel — nur bei Fehlern und Reboot-Bedarf benachrichtigen: ```ini [NotificationEvents] NotifyOnModuleError = true NotifyOnHookFailure = true NotifyOnNoUpdates = false NotifyOnDryRun = false NotifyOnUpdateComplete = true NotifyOnReboot = true NotifyOnRebootRequired = true NotifyOnServiceRestartFailure = true ``` Wird die Sektion `[NotificationEvents]` nicht angegeben oder ein Schlüssel weggelassen, ist das jeweilige Ereignis standardmäßig **aktiviert** (`true`). ## Sicherheitshinweis Die `config.ini` enthält möglicherweise Zugangsdaten (SMTP-Passwort, ntfy-Token). Stelle sicher, dass: - Die Datei `config.ini` in `.gitignore` eingetragen ist (ist standardmäßig der Fall) - Die Dateiberechtigungen auf dem Server eingeschränkt sind (nur Administratoren) - Das SMTP-Passwort idealerweise ein App-spezifisches Passwort ist, nicht das Hauptpasswort