diff --git a/docs/task-scheduler.md b/docs/task-scheduler.md
index 900eb01..425248a 100644
--- a/docs/task-scheduler.md
+++ b/docs/task-scheduler.md
@@ -51,24 +51,58 @@ Den Rest wie oben, nur den Trigger austauschen.
### Monatlich (z.B. erster Montag im Monat um 04:00 Uhr)
-```powershell
-$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -WeeksInterval 1 -At "04:00"
+`New-ScheduledTaskTrigger` bietet keine `-Monthly`-Option mit Wochentag, und die CIM-Klasse
+`MSFT_TaskMonthlyDOWTrigger` wird von `Register-ScheduledTask` nicht akzeptiert ("Falscher Parameter").
+Daher wird die Aufgabe per XML über `schtasks.exe` erstellt:
-# New-ScheduledTaskTrigger bietet kein -Monthly mit Wochentag-Option,
-# daher wird der CIM-Trigger verwendet (entspricht GUI → "Monatlich"):
-$trigger = New-CimInstance -CimClass (
- Get-CimClass -Namespace "Root/Microsoft/Windows/TaskScheduler" `
- -ClassName "MSFT_TaskMonthlyDOWTrigger"
-) -ClientOnly -Property @{
- DaysOfWeek = [int16]2 # Montag (So=1, Mo=2, Di=4, Mi=8, Do=16, Fr=32, Sa=64)
- WeeksOfMonth = [int16]1 # Erste Woche
- Months = [int16]4095 # Alle 12 Monate (Bit-Summe: 1+2+4+...+2048)
- Enabled = $true
-}
-$trigger.StartBoundary = (Get-Date "04:00").ToString("yyyy-MM-dd'T'HH:mm:ss")
+```powershell
+$startDate = (Get-Date "04:00").ToString("yyyy-MM-dd'T'HH:mm:ss")
+$xml = @"
+
+
+
+
+ $startDate
+ true
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ S-1-5-18
+ HighestAvailable
+
+
+
+
+ powershell.exe
+ -ExecutionPolicy Bypass -NoProfile -File "C:\scripts\windows-updater\windows-updater.ps1"
+
+
+
+ true
+ true
+ true
+ PT2H
+ false
+ false
+
+
+"@
+$xmlPath = "$env:TEMP\windows-updater-monthly.xml"
+$xml | Out-File -FilePath $xmlPath -Encoding Unicode
+schtasks.exe /Create /TN "Windows Updater - Monthly" /XML $xmlPath /F
+Remove-Item $xmlPath
```
-Den Rest wie beim täglichen Beispiel, nur den Trigger austauschen.
+**Wochentag/Woche anpassen**: `` durch den gewünschten Tag ersetzen (``, ``, etc.), `1` durch die gewünschte Woche (1-4) oder `` für die letzte Woche.
### Defender-Updates alle 4 Stunden
@@ -105,40 +139,52 @@ Zwei Aufgaben anlegen — eine für Defender (häufig), eine für alle Updates (
```powershell
# Aufgabe 1: Defender alle 4 Stunden (wie oben)
+
# Aufgabe 2: Volle Updates monatlich am ersten Sonntag um 03:00
-$action = New-ScheduledTaskAction `
- -Execute "powershell.exe" `
- -Argument "-ExecutionPolicy Bypass -NoProfile -File `"C:\scripts\windows-updater\windows-updater.ps1`""
-
-$trigger = New-CimInstance -CimClass (
- Get-CimClass -Namespace "Root/Microsoft/Windows/TaskScheduler" `
- -ClassName "MSFT_TaskMonthlyDOWTrigger"
-) -ClientOnly -Property @{
- DaysOfWeek = [int16]1 # Sonntag
- WeeksOfMonth = [int16]1 # Erste Woche
- Months = [int16]4095 # Alle 12 Monate
- Enabled = $true
-}
-$trigger.StartBoundary = (Get-Date "03:00").ToString("yyyy-MM-dd'T'HH:mm:ss")
-
-$principal = New-ScheduledTaskPrincipal `
- -UserId "SYSTEM" `
- -RunLevel Highest `
- -LogonType ServiceAccount
-
-$settings = New-ScheduledTaskSettingsSet `
- -AllowStartIfOnBatteries `
- -DontStopIfGoingOnBatteries `
- -StartWhenAvailable `
- -ExecutionTimeLimit (New-TimeSpan -Hours 2)
-
-Register-ScheduledTask `
- -TaskName "Windows Updater - Monthly" `
- -Action $action `
- -Trigger $trigger `
- -Principal $principal `
- -Settings $settings `
- -Description "Vollständige Windows Updates monatlich"
+$startDate = (Get-Date "03:00").ToString("yyyy-MM-dd'T'HH:mm:ss")
+$xml = @"
+
+
+
+
+ $startDate
+ true
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ S-1-5-18
+ HighestAvailable
+
+
+
+
+ powershell.exe
+ -ExecutionPolicy Bypass -NoProfile -File "C:\scripts\windows-updater\windows-updater.ps1"
+
+
+
+ true
+ true
+ true
+ PT2H
+ false
+ false
+
+
+"@
+$xmlPath = "$env:TEMP\windows-updater-monthly.xml"
+$xml | Out-File -FilePath $xmlPath -Encoding Unicode
+schtasks.exe /Create /TN "Windows Updater - Monthly" /XML $xmlPath /F
+Remove-Item $xmlPath
```
### Bestehende Aufgabe ändern