Task planning revised
This commit is contained in:
@@ -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 = @"
|
||||
<?xml version="1.0" encoding="UTF-16"?>
|
||||
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
||||
<Triggers>
|
||||
<CalendarTrigger>
|
||||
<StartBoundary>$startDate</StartBoundary>
|
||||
<Enabled>true</Enabled>
|
||||
<ScheduleByMonthDayOfWeek>
|
||||
<Weeks><Week>1</Week></Weeks>
|
||||
<DaysOfWeek><Monday /></DaysOfWeek>
|
||||
<Months>
|
||||
<January /><February /><March /><April /><May /><June />
|
||||
<July /><August /><September /><October /><November /><December />
|
||||
</Months>
|
||||
</ScheduleByMonthDayOfWeek>
|
||||
</CalendarTrigger>
|
||||
</Triggers>
|
||||
<Principals>
|
||||
<Principal id="Author">
|
||||
<UserId>S-1-5-18</UserId>
|
||||
<RunLevel>HighestAvailable</RunLevel>
|
||||
</Principal>
|
||||
</Principals>
|
||||
<Actions Context="Author">
|
||||
<Exec>
|
||||
<Command>powershell.exe</Command>
|
||||
<Arguments>-ExecutionPolicy Bypass -NoProfile -File "C:\scripts\windows-updater\windows-updater.ps1"</Arguments>
|
||||
</Exec>
|
||||
</Actions>
|
||||
<Settings>
|
||||
<AllowStartOnDemand>true</AllowStartOnDemand>
|
||||
<StartWhenAvailable>true</StartWhenAvailable>
|
||||
<AllowHardTerminate>true</AllowHardTerminate>
|
||||
<ExecutionTimeLimit>PT2H</ExecutionTimeLimit>
|
||||
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
|
||||
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
|
||||
</Settings>
|
||||
</Task>
|
||||
"@
|
||||
$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**: `<Monday />` durch den gewünschten Tag ersetzen (`<Sunday />`, `<Tuesday />`, etc.), `<Week>1</Week>` durch die gewünschte Woche (1-4) oder `<Last />` 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 = @"
|
||||
<?xml version="1.0" encoding="UTF-16"?>
|
||||
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
||||
<Triggers>
|
||||
<CalendarTrigger>
|
||||
<StartBoundary>$startDate</StartBoundary>
|
||||
<Enabled>true</Enabled>
|
||||
<ScheduleByMonthDayOfWeek>
|
||||
<Weeks><Week>1</Week></Weeks>
|
||||
<DaysOfWeek><Sunday /></DaysOfWeek>
|
||||
<Months>
|
||||
<January /><February /><March /><April /><May /><June />
|
||||
<July /><August /><September /><October /><November /><December />
|
||||
</Months>
|
||||
</ScheduleByMonthDayOfWeek>
|
||||
</CalendarTrigger>
|
||||
</Triggers>
|
||||
<Principals>
|
||||
<Principal id="Author">
|
||||
<UserId>S-1-5-18</UserId>
|
||||
<RunLevel>HighestAvailable</RunLevel>
|
||||
</Principal>
|
||||
</Principals>
|
||||
<Actions Context="Author">
|
||||
<Exec>
|
||||
<Command>powershell.exe</Command>
|
||||
<Arguments>-ExecutionPolicy Bypass -NoProfile -File "C:\scripts\windows-updater\windows-updater.ps1"</Arguments>
|
||||
</Exec>
|
||||
</Actions>
|
||||
<Settings>
|
||||
<AllowStartOnDemand>true</AllowStartOnDemand>
|
||||
<StartWhenAvailable>true</StartWhenAvailable>
|
||||
<AllowHardTerminate>true</AllowHardTerminate>
|
||||
<ExecutionTimeLimit>PT2H</ExecutionTimeLimit>
|
||||
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
|
||||
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
|
||||
</Settings>
|
||||
</Task>
|
||||
"@
|
||||
$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
|
||||
|
||||
Reference in New Issue
Block a user