Files
windows-updater/docs/configuration.md
2026-07-07 10:14:27 +02:00

287 lines
9.8 KiB
Markdown

# Konfiguration
Alle Einstellungen werden in der Datei `config.ini` vorgenommen, die sich im selben Verzeichnis wie das Script befindet. Als Vorlage dient `config.example.ini`.
## Übersicht aller Optionen
### [General]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `LogPath` | String | `C:\logs\windows-updater` | Verzeichnis für Log-Dateien (eine Datei pro Tag) |
| `LogRetentionDays` | Integer | `365` | Anzahl Tage, nach denen alte Log-Dateien gelöscht werden |
| `DryRun` | Boolean | `false` | Nur prüfen welche Updates verfügbar sind, ohne zu installieren. Kann per `-DryRun` Parameter überschrieben werden |
| `UpdateType` | String | `All` | Art der Updates: `All` (alle Updates), `DefenderOnly` (nur Defender-Definitionsupdates). Kann per `-DefenderOnly` Parameter überschrieben werden |
### [WindowsUpdate]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `UseMicrosoftUpdate` | Boolean | `true` | Microsoft Update verwenden (inkl. Office, .NET, Treiber). Bei `false` nur Windows Update |
| `ExcludeKBs` | String | *(leer)* | Kommagetrennte Liste von KB-Artikeln die übersprungen werden sollen (z.B. `KB1234567,KB7654321`) |
| `ExcludeDrivers` | Boolean | `false` | Treiber-Updates ausschließen |
| `RetryCount` | Integer | `3` | Anzahl Wiederholungsversuche für fehlgeschlagene Updates |
### [Winget]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `Enabled` | Boolean | `false` | Winget-Updates aktivieren (`winget upgrade --all`). Wird automatisch übersprungen, wenn winget nicht verfügbar ist |
### [Reboot]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `Enabled` | Boolean | `false` | Automatischen Neustart nach Updates aktivieren |
| `Mode` | String | `immediate` | Neustart-Modus: `immediate` (sofort), `delayed` (verzögert), `scheduled` (geplante Uhrzeit) |
| `DelayMinutes` | Integer | `5` | Verzögerung in Minuten (nur bei `Mode = delayed`) |
| `ScheduledTime` | String | `03:00` | Uhrzeit im Format HH:mm (nur bei `Mode = scheduled`). Liegt die Uhrzeit in der Vergangenheit, wird der nächste Tag verwendet |
### [Notification]
#### ntfy
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `NtfyEnabled` | Boolean | `false` | ntfy-Benachrichtigungen aktivieren |
| `NtfyUrl` | String | `https://ntfy.sh` | URL des ntfy-Servers |
| `NtfyTopic` | String | `windows-updates` | ntfy-Topic-Name |
| `NtfyToken` | String | *(leer)* | Zugangs-Token (leer lassen wenn nicht benötigt) |
| `NtfyPriority` | String | `default` | Priorität: `min`, `low`, `default`, `high`, `urgent` |
#### E-Mail
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `EmailEnabled` | Boolean | `false` | E-Mail-Benachrichtigungen aktivieren |
| `SmtpServer` | String | *(leer)* | SMTP-Server Adresse |
| `SmtpPort` | Integer | `587` | SMTP-Port |
| `SmtpUseSsl` | Boolean | `true` | SSL/TLS für SMTP verwenden |
| `SmtpUsername` | String | *(leer)* | SMTP-Benutzername (leer für anonyme Authentifizierung) |
| `SmtpPassword` | String | *(leer)* | SMTP-Passwort |
| `EmailFrom` | String | *(leer)* | Absender-Adresse |
| `EmailTo` | String | *(leer)* | Empfänger-Adresse(n), kommagetrennt |
| `EmailHtmlReport` | Boolean | `true` | HTML-formatierten Report mit Update-Tabelle senden |
#### Microsoft Teams
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `TeamsEnabled` | Boolean | `false` | Teams-Benachrichtigungen aktivieren |
| `TeamsWebhookUrl` | String | *(leer)* | Webhook-URL für den Teams-Kanal |
### [NotificationEvents]
Steuert, welche Ereignisse eine Benachrichtigung auslösen. Alle Ereignisse sind standardmäßig aktiviert. Details zu jedem Ereignis: siehe [Benachrichtigungen](notifications.md#benachrichtigungs-ereignisse).
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `NotifyOnModuleError` | Boolean | `true` | PSWindowsUpdate-Modul konnte nicht geladen werden |
| `NotifyOnHookFailure` | Boolean | `true` | Pre-Update Hook fehlgeschlagen, Updates abgebrochen |
| `NotifyOnNoUpdates` | Boolean | `true` | Keine Updates verfügbar |
| `NotifyOnDryRun` | Boolean | `true` | Dry-Run Report mit verfügbaren Updates |
| `NotifyOnUpdateComplete` | Boolean | `true` | Zusammenfassung nach Update-Installation |
| `NotifyOnReboot` | Boolean | `true` | Neustart wird ausgeführt (immediate/delayed/scheduled) |
| `NotifyOnRebootRequired` | Boolean | `true` | Neustart nötig, aber Auto-Reboot ist deaktiviert |
| `NotifyOnScanError` | Boolean | `true` | Fehler beim Scannen nach Updates |
| `NotifyOnServiceRestartFailure` | Boolean | `true` | Service-Watchdog konnte einen oder mehrere Dienste nicht starten |
### [ServiceWatchdog]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `Enabled` | Boolean | `false` | Service-Watchdog aktivieren: Dienste nach Updates neu starten, wenn kein Reboot erforderlich ist |
| `Services` | String | *(leer)* | Kommagetrennte Liste von Windows-Dienstnamen (Service Name, nicht Display Name), z.B. `Spooler,W3SVC,MSSQLSERVER` |
| `WaitSeconds` | Integer | `30` | Wartezeit in Sekunden, bis ein Dienst den Status "Running" erreicht hat |
| `RetryCount` | Integer | `3` | Anzahl Neustartversuche pro Dienst |
### [Hooks]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `PreUpdateScript` | String | *(leer)* | Pfad zu einem PowerShell-Script, das VOR den Updates ausgeführt wird |
| `AbortOnPreHookFailure` | Boolean | `false` | Update-Prozess abbrechen wenn das Pre-Hook-Script fehlschlägt |
| `PostUpdateScript` | String | *(leer)* | Pfad zu einem PowerShell-Script, das NACH den Updates ausgeführt wird |
### [History]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| `Enabled` | Boolean | `false` | Update-History-Tracking aktivieren |
| `HistoryPath` | String | `C:\logs\windows-updater\update-history` | Basispfad für die History-Datei (Dateiendung wird automatisch gewählt: `.xlsx` wenn ImportExcel verfügbar, sonst `.csv`) |
## Kommandozeilen-Parameter
Das Script unterstützt Parameter, die Config-Werte überschreiben. So kann dasselbe Script mit einer Config-Datei für verschiedene Einsatzzwecke verwendet werden.
| Parameter | Überschreibt | Beschreibung |
|---|---|---|
| `-DefenderOnly` | `UpdateType` | Nur Windows Defender Definitionsupdates installieren |
| `-DryRun` | `DryRun` | Nur prüfen, nicht installieren |
| `-ConfigFile <Pfad>` | *(Config-Pfad)* | Alternative Konfigurationsdatei verwenden |
### DefenderOnly-Modus im Detail
Im DefenderOnly-Modus werden ausschließlich Updates der Kategorie "Definition Updates" (Windows Defender Signaturen) installiert. Folgende Funktionen werden dabei übersprungen:
- **Winget-Updates** — nicht relevant für Defender-Signaturen
- **Reboot-Handling** — Definitionsupdates erfordern keinen Neustart
- **Service Watchdog** — kein Neustart von Diensten nötig
- **Treiber-Ausschluss** (`ExcludeDrivers`) — nicht relevant, da nur Definitionsupdates geladen werden
Pre-/Post-Update Hooks, Logging, History und Benachrichtigungen funktionieren normal.
## Boolean-Werte
Folgende Werte werden als `true` erkannt (Groß-/Kleinschreibung egal):
- `true`, `1`, `yes`
Alles andere wird als `false` interpretiert.
## Beispiel-Konfigurationen
### Minimal (nur Windows Updates)
```ini
[General]
LogPath = C:\logs\windows-updater
DryRun = false
[WindowsUpdate]
UseMicrosoftUpdate = true
```
### Nur Defender-Updates (per Config)
```ini
[General]
LogPath = C:\logs\windows-updater
DryRun = false
UpdateType = DefenderOnly
[WindowsUpdate]
UseMicrosoftUpdate = true
```
### Dual-Setup: Defender häufig + volle Updates monatlich
Eine Config-Datei genügt. Die Unterscheidung erfolgt per Parameter:
```ini
[General]
LogPath = C:\logs\windows-updater
DryRun = false
# UpdateType = All (Standard, volle Updates)
[WindowsUpdate]
UseMicrosoftUpdate = true
ExcludeDrivers = true
RetryCount = 3
```
Aufgabenplanung:
```powershell
# Alle 4 Stunden: nur Defender-Updates
powershell.exe -ExecutionPolicy Bypass -File "C:\scripts\windows-updater\windows-updater.ps1" -DefenderOnly
# Einmal im Monat (z.B. erster Sonntag, 03:00): alle Updates
powershell.exe -ExecutionPolicy Bypass -File "C:\scripts\windows-updater\windows-updater.ps1"
```
### Mit E-Mail Benachrichtigung
```ini
[General]
LogPath = C:\logs\windows-updater
DryRun = false
[WindowsUpdate]
UseMicrosoftUpdate = true
ExcludeDrivers = true
[Notification]
EmailEnabled = true
SmtpServer = smtp.example.com
SmtpPort = 587
SmtpUseSsl = true
SmtpUsername = user@example.com
SmtpPassword = geheim123
EmailFrom = updater@example.com
EmailTo = admin@example.com
EmailHtmlReport = true
[Reboot]
Enabled = true
Mode = delayed
DelayMinutes = 10
```
### Vollständig mit ntfy und History
```ini
[General]
LogPath = C:\logs\windows-updater
LogRetentionDays = 365
DryRun = false
[WindowsUpdate]
UseMicrosoftUpdate = true
ExcludeKBs = KB1234567,KB7654321
ExcludeDrivers = true
RetryCount = 3
[Winget]
Enabled = true
[Reboot]
Enabled = true
Mode = scheduled
ScheduledTime = 03:00
[Notification]
NtfyEnabled = true
NtfyUrl = https://ntfy.mein-server.de
NtfyTopic = windows-updates
NtfyToken = tk_mein_token
NtfyPriority = default
EmailEnabled = true
SmtpServer = smtp.example.com
SmtpPort = 587
SmtpUseSsl = true
SmtpUsername = user@example.com
SmtpPassword = geheim123
EmailFrom = updater@example.com
EmailTo = admin@example.com,ops@example.com
EmailHtmlReport = true
TeamsEnabled = true
TeamsWebhookUrl = https://xxxxx.webhook.office.com/webhookb2/...
[NotificationEvents]
NotifyOnModuleError = true
NotifyOnHookFailure = true
NotifyOnNoUpdates = false
NotifyOnDryRun = true
NotifyOnUpdateComplete = true
NotifyOnReboot = true
NotifyOnRebootRequired = true
NotifyOnServiceRestartFailure = true
[ServiceWatchdog]
Enabled = true
Services = Spooler,W3SVC
WaitSeconds = 30
RetryCount = 3
[Hooks]
PreUpdateScript = C:\scripts\pre-update.ps1
AbortOnPreHookFailure = true
PostUpdateScript = C:\scripts\post-update.ps1
[History]
Enabled = true
HistoryPath = C:\logs\windows-updater\update-history
```