From e18e399ba75e114fa9d63b0c8e7002105aeb53ab Mon Sep 17 00:00:00 2001 From: Patrick Asmus Date: Tue, 14 Jul 2026 19:28:08 +0200 Subject: [PATCH] Task planning revised --- docs/task-scheduler.md | 142 +++++++++++++++++++++++++++-------------- 1 file changed, 94 insertions(+), 48 deletions(-) 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