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.

Share:TelegramX

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

💬 Leave a comment

Comments are moderated before publishing.

← All articles