How to Use Task Scheduler in Windows 10 and 11: Full Guide
Create, edit and manage scheduled tasks in Windows Task Scheduler. Run scripts, programs and backups automatically on schedule, login, or system event.
Task Scheduler lets you run any program, script, or command automatically — on a schedule, at login, on system startup, or triggered by an event. Here's how to use it effectively.
Open Task Scheduler
Win + R → taskschd.msc
Or: Win + S → search Task Scheduler
Task Scheduler Structure
- Task Scheduler Library — all existing tasks, organized in folders
- Microsoft\Windows — built-in Windows tasks (don't delete these)
- Your custom tasks go in the root or a custom folder
Create a Basic Scheduled Task
Via GUI:
- Right-click Task Scheduler Library → Create Basic Task
- Name:
My Backup Task - Trigger: Daily, Weekly, At startup, or When I log on
- Action: Start a program
- Program:
C:\Scripts\backup.ps1or any.exe - Finish
Via PowerShell:
# Run a script every day at 9:00 AM
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NonInteractive -File C:\Scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "9:00AM"
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable
Register-ScheduledTask -TaskName "DailyBackup" `
-Action $action -Trigger $trigger -Settings $settings `
-Description "Daily backup at 9AM" -RunLevel Highest
Common Trigger Types
# At system startup
$trigger = New-ScheduledTaskTrigger -AtStartup
# At user login
$trigger = New-ScheduledTaskTrigger -AtLogOn
# Every hour
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Hours 1) -Once -At "00:00"
# On specific day of week
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At "08:00AM"
# At idle (when PC not in use)
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfIdle -IdleDuration (New-TimeSpan -Minutes 10)
Run PowerShell Scripts via Task Scheduler
# Always use -NonInteractive and -ExecutionPolicy Bypass for scheduled scripts
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File C:\Scripts\task.ps1"
# Run as SYSTEM (no user needs to be logged in)
Register-ScheduledTask -TaskName "SystemTask" `
-Action $action -Trigger (New-ScheduledTaskTrigger -AtStartup) `
-Principal (New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest)
Manage Existing Tasks
# List all custom tasks (not Microsoft built-ins)
Get-ScheduledTask | Where-Object {$_.TaskPath -eq "\"} |
Select-Object TaskName, State, @{n='LastRun';e={$_.LastRunTime}}
# Run a task immediately
Start-ScheduledTask -TaskName "DailyBackup"
# Disable a task
Disable-ScheduledTask -TaskName "DailyBackup"
# Delete a task
Unregister-ScheduledTask -TaskName "DailyBackup" -Confirm:$false
# Check last run result (0 = success)
(Get-ScheduledTaskInfo -TaskName "DailyBackup").LastTaskResult
Useful Scheduled Task Examples
Auto-cleanup temp files weekly:
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument '-Command "Remove-Item $env:TEMP\* -Recurse -Force -EA 0"'
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At "02:00AM"
Register-ScheduledTask -TaskName "WeeklyCleanup" -Action $action -Trigger $trigger -RunLevel Highest
Run script on USB drive connection (Event trigger):
$trigger = New-ScheduledTaskTrigger -AtStartup # use Event trigger via GUI for USB events
# In GUI: Trigger → New → On an event → System → 20001 (USB device connected)
Wake PC to run task:
In task properties → Conditions → check Wake the computer to run this task
Troubleshoot Scheduled Tasks
# View task history (enable in Task Scheduler: Action → Enable All Tasks History)
Get-WinEvent -LogName "Microsoft-Windows-TaskScheduler/Operational" -MaxEvents 20 |
Where-Object {$_.Message -like "*DailyBackup*"} |
Select-Object TimeCreated, Message
# Common error codes
# 0x0 = Success
# 0x1 = Incorrect function (script error)
# 0x41301 = Task is currently running
# 0x41306 = Task is disabled
# 0x8004131F = No instances of the task are running
Summary
taskschd.msc opens Task Scheduler. Use Register-ScheduledTask in PowerShell for scripted task creation. Always use -NonInteractive -ExecutionPolicy Bypass for PowerShell scripts. Run as SYSTEM for tasks that need to run without a logged-in user. Check Last Run Result — 0 means success.