How to Use Task Scheduler in Windows 10 and 11: Full Guide

6 min read

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 + Rtaskschd.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:

  1. Right-click Task Scheduler LibraryCreate Basic Task
  2. Name: My Backup Task
  3. Trigger: Daily, Weekly, At startup, or When I log on
  4. Action: Start a program
  5. Program: C:\Scripts\backup.ps1 or any .exe
  6. 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.

Related articles

← All articles