287 lines
9.8 KiB
Markdown
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
|
|
```
|