- Overzicht
- Notatie van variabelen
- Stap 1: Taakregistratie en basisinstellingen
- Stap 2: Eventlog-trigger met XML-sjabloon
- Stap 3: Voorwaardelijke triggers en uitvoercondities
- Stap 4: Beheer van bestaande taken
- Operationeel logboek inschakelen
- Stap 5: Troubleshooting en logcontrole
- Stap 6: Aanbevolen instellingen
- Samenvatting
Overzicht
Dit artikel behandelt geavanceerde automatisering met de Windows Taakplanner.
We bespreken voorwaardelijke triggers, eventlog-gestuurde uitvoering, taakregistratie en -beheer via PowerShell, plus een beveiligingsbewuste operationele aanpak.
Notatie van variabelen
| Variabele | Voorbeeld | Opmerking |
|---|---|---|
<<TASK_NAME>> |
Daily-Backup |
Taaknaam |
<<SCRIPT_PATH>> |
C:\Scripts\backup.ps1 |
Pad naar het script |
<<EVENT_ID>> |
4625 |
Doel-event-ID |
<<USERNAME>> |
Administrator |
Gebruiker die de taak uitvoert |
<<TASK_PATH>> |
\MyCompany\Maintenance |
Taakmap (optioneel) |
Stap 1: Taakregistratie en basisinstellingen
Voor het registreren van taken met PowerShell combineer je doorgaans drie cmdlets:
| Cmdlet | Doel |
|---|---|
New-ScheduledTaskAction |
Definieert het uit te voeren programma/script |
New-ScheduledTaskTrigger |
Definieert het uitvoermoment (tijd/evenement) |
Register-ScheduledTask |
Registreert de volledige taak (Action + Trigger + Settings) |
① Opties van New-ScheduledTaskAction
| Optie | Beschrijving | Voorbeeld |
|---|---|---|
-Execute |
Uitvoerbaar bestand | "powershell.exe" |
-Argument |
Opstartargumenten | "-NoProfile -NonInteractive -ExecutionPolicy Bypass -File <<SCRIPT_PATH>>" |
-WorkingDirectory |
Werkmap | "C:\Scripts" |
-Id |
Actie-ID (bij meerdere acties) | "Action1" |
💡 Meerdere acties? Maak meerdere
New-ScheduledTaskAction-objecten en geef ze als array door.
② Opties van New-ScheduledTaskTrigger
| Optie | Beschrijving | Voorbeeld |
|---|---|---|
-Daily |
Dagelijks | te combineren met -At 3:00AM |
-Weekly |
Wekelijks | -DaysOfWeek Monday,Wednesday |
-Once |
Eenmalig | -At (Get-Date).AddHours(1) |
-AtStartup |
Bij systeemstart | — |
-AtLogOn |
Bij aanmelding | — |
-RepetitionInterval |
Herhalingsinterval | (New-TimeSpan -Minutes 30) |
-RepetitionDuration |
Totale herhalingsduur | (New-TimeSpan -Days 1) |
-RandomDelay |
Willekeurige vertraging | (New-TimeSpan -Minutes 5) |
-StartBoundary / -EndBoundary |
Geldigheidsperiode | "2025-01-01T00:00:00" |
⚠️
-RepetitionIntervalen-RepetitionDurationwerken alleen bij bepaalde trigger-typen (bijv. Daily/Once).
③ New-ScheduledTaskSettingsSet (optioneel)
| Optie | Beschrijving | Voorbeeld |
|---|---|---|
-AllowStartIfOnBatteries |
Toestaan op batterijvoeding | $false |
-DontStopIfGoingOnBatteries |
Doorgaan bij wissel naar batterij | $false |
-StartWhenAvailable |
Starten zodra mogelijk | $true |
-Hidden |
Taak verbergen | $true |
-RunOnlyIfNetworkAvailable |
Alleen met netwerk | $true |
-ExecutionTimeLimit |
Maximale looptijd | (New-TimeSpan -Hours 2) |
-MultipleInstances |
Beleid meervoudige instanties (IgnoreNew/Parallel/Queue) | "IgnoreNew" |
-RestartCount / -RestartInterval |
Herhalingspogingen en interval | 3, (New-TimeSpan -Minutes 5) |
💡
New-ScheduledTaskSettingsSetmaakt een instelling-object voor de-Settingsparameter: energie, netwerk, herstarten, etc.
④ Belangrijke opties van Register-ScheduledTask
| Optie | Beschrijving | Voorbeeld |
|---|---|---|
-TaskName |
Naam | "Daily-Backup" |
-TaskPath |
Map | "\MyCompany\Maintenance" |
-Action |
Actie(s) | $action |
-Trigger |
Trigger(s) | $trigger |
-Settings |
Extra instellingen | $settings |
-Description |
Beschrijving | "Daily maintenance backup task" |
-User |
Account | "SYSTEM" of "Administrator" |
-RunLevel |
Rechtenniveau | Highest |
-Force |
Overschrijven toestaan | — |
💡 De volledige taak bestaat uit een combinatie van Action, Trigger en Settings.
⑤ Voorbeeldconfiguratie
# Actie
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File <<SCRIPT_PATH>>"
# Trigger (dagelijks 03:00)
$trigger = New-ScheduledTaskTrigger -Daily -At 3:00AM
# Registratie
Register-ScheduledTask -TaskName "<<TASK_NAME>>" `
-TaskPath "<<TASK_PATH>>\Daily" `
-Action $action -Trigger $trigger `
-User "<<USERNAME>>" -Description "Dagelijkse geplande taak om 03:00"
⑥ Aandachtspunten
- Gebruik
-ExecutionPolicy Bypassalleen intern; overweeg gesigneerde scripts. - Voorkeur voor SYSTEM of een dedicated service-account.
- Minimale
-RepetitionIntervalis 1 minuut; standaardlimiet-RepetitionDurationis 1 dag. - Overschrijven vereist
-Force. -RunLevel Highestalleen voor beheertaken.
Stap 2: Eventlog-trigger met XML-sjabloon
PowerShell biedt (nog) geen native event-triggers via New-ScheduledTaskTrigger (zoals -OnEvent).
Gebruik daarom XML-import voor eventgestuurde taken.
Registratie:
$xml = @'
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Author><<USERNAME>></Author>
<Description>Scriptuitvoering bij EventID <<EVENT_ID>></Description>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><![CDATA[
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=<<EVENT_ID>>)]]</Select>
</Query>
</QueryList>
]]></Subscription>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>SYSTEM</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
<Arguments>-NoProfile -ExecutionPolicy Bypass -File "<<SCRIPT_PATH>>"</Arguments>
</Exec>
</Actions>
</Task>
'@
Register-ScheduledTask -TaskName "<<TASK_NAME>>" -TaskPath "<<TASK_PATH>>\OnEvent" -Xml $xml -User "SYSTEM"
Stap 3: Voorwaardelijke triggers en uitvoercondities
Definieer taakcondities (voeding, netwerk, idle) met New-ScheduledTaskSettingsSet.
$settings = New-ScheduledTaskSettingsSet `
-AllowStartIfOnBatteries:$false `
-DontStopIfGoingOnBatteries:$false `
-StartWhenAvailable:$true `
-Hidden:$false `
-RunOnlyIfNetworkAvailable:$true `
-ExecutionTimeLimit (New-TimeSpan -Hours 2)
Register-ScheduledTask -TaskName "<<TASK_NAME>>_Cond" `
-TaskPath "<<TASK_PATH>>\Conditional" `
-Action $action -Trigger $trigger -Settings $settings `
-User "<<USERNAME>>" -Description "Voorwaardelijke taak (netwerk vereist / netvoeding)"
Veelgebruikte condities
| Conditie | Instelling | Toelichting |
|---|---|---|
| Alleen netvoeding | -AllowStartIfOnBatteries:$false |
Geen uitvoering op batterij |
| Netwerk vereist | -RunOnlyIfNetworkAvailable:$true |
Slaat uit als geen verbinding |
| Alleen idle | XML of COM | Beperkte native PowerShell-ondersteuning |
| Max. looptijd | -ExecutionTimeLimit |
Voorkomt runaway-processen |
| Herstartpogingen | XML of herhalingstrigger | Sommige limieten in PowerShell |
Stap 4: Beheer van bestaande taken
# Overzicht
Get-ScheduledTask | Where-Object TaskPath -like "<<TASK_PATH>>*"
# In-/uitschakelen
Enable-ScheduledTask -TaskName "<<TASK_NAME>>"
Disable-ScheduledTask -TaskName "<<TASK_NAME>>"
# Status
Get-ScheduledTaskInfo -TaskName "<<TASK_NAME>>" |
Select-Object TaskName, NextRunTime, LastRunTime, LastTaskResult
Operationeel logboek inschakelen
Het kanaal Microsoft-Windows-TaskScheduler/Operational kan standaard uit staan.
Schakel het in voor troubleshooting en detailhistorie.
wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:true
Stap 5: Troubleshooting en logcontrole
# Laatste uitvoerresultaat
Get-ScheduledTaskInfo -TaskName "<<TASK_NAME>>"
# Operationeel log filteren op taaknaam
Get-WinEvent -LogName "Microsoft-Windows-TaskScheduler/Operational" -MaxEvents 50 |
Where-Object { $_.Message -match "<<TASK_NAME>>" } |
Select-Object TimeCreated, Id, Message | Format-Table -AutoSize
Veelvoorkomende oorzaken en maatregelen
| Oorzaak | Maatregel |
|---|---|
| Onvoldoende rechten | Accountrechten herzien / service-account gebruiken |
| ExecutionPolicy blokkeert | Gesigneerd script of -ExecutionPolicy Bypass |
| Ontbrekende paden/beschrijving | Stel -TaskPath en -Description in |
| Event-trigger werkt niet | XML-definitie en eventfilter opnieuw valideren |
| Conflicterende condities | Triggers/instellingen herzien op logische tegenstrijdigheid |
Stap 6: Aanbevolen instellingen
- Gebruik SYSTEM of een dedicated service-account met least-privilege.
- Voeg logging en foutafhandeling toe aan scripts; registreer succes/fout.
- Beheer taakdefinities als templates (XML) in versiebeheer (bijv. GitHub).
- Monitor cyclisch met
Get-ScheduledTaskInfoen alarmeer bij afwijkingen. - Verwijder overbodige taken met
Unregister-ScheduledTasken houd de bibliotheek schoon.
Samenvatting
De Windows Taakplanner is niet alleen voor tijdgestuurde runs; met eventtriggers, voorwaardelijke uitvoering en PowerShell-integratie vormt hij een krachtig automatiseringsplatform.
Scriptaanpak voor registratie, beheer en monitoring levert reproduceerbaarheid, beheersbaarheid en beveiliging op in de operatie.
