Skip to content

How to schedule tasks using PowerShell

Jordan Hammond fun headshot
Jordan Hammond|July 2, 2025
Illustration of Power(turtle)Shell
Illustration of Power(turtle)Shell

To automate tasks tied to a user's profile, you can use PowerShell or Group Policy. This guide explains when to use each method and how to schedule tasks step by step with PowerShell.

How to choose between Group Policy and PowerShell for task scheduling

If you have access to Group Policy, use it. Group Policy is ideal for running scripts at user logon or logoff and centrally managing user environments. And since these scripts are stored and managed centrally, you don’t have to track them across multiple machines.

Group Policy is best when you want to:

  • Run scripts at logon or logoff that affect the user’s profile

  • Manage scripts centrally across multiple machines

  • Avoid manual task creation or custom schedules

But not everyone has access to Group Policy. If that’s the case, PowerShell helps you achieve a similar outcome by creating scheduled tasks.

Key PowerShell commands for scheduled tasks

Use PowerShell to create scheduled tasks when Group Policy isn't available. PowerShell’s command structure is straightforward, with commands following the pattern:

Verb-Noun

To list available commands related to scheduled tasks, you can use:

Get-Command *ScheduledTask*

Use these PowerShell cmdlets to build a scheduled task:

  • New-ScheduledTaskAction: Defines the script or command the task runs 

  • New-ScheduledTaskPrincipal: Sets the user or system context 

  • New-ScheduledTaskTrigger: Schedules when the task runs 

  • New-ScheduledTaskSettingsSet: Adjusts behavior like repetition and delay 

  • Register-ScheduledTask: Combines and registers the full task 

PowerShell podcast logo

PowerShell power user?

Check out The PowerShell Podcast: a weekly exploration of tips and tricks to help you step up your PowerShell game.

How do you build a scheduled task with PowerShell?

Follow these five steps to create a scheduled task with PowerShell.

1. Define the action

Use New-ScheduledTaskAction to set what the task does (e.g., run a script):

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "C:\Scripts\MyScript.ps1"

2. Set the trigger

Use New-ScheduledTaskTrigger to define when it runs (logon, specific time, or interval):

$trigger = New-ScheduledTaskTrigger -AtLogon

You can also create a trigger that runs at a specific time:

$trigger = New-ScheduledTaskTrigger -Once -At 7am

If you want the task to repeat, simply add a repetition interval:

$trigger.Repetition = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 30)

3. Specify the principal (run as)

Use Register-ScheduledTask to finalize and apply the task:

$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest

If you need it to run as the logged-in user, use this:

$principal = New-ScheduledTaskPrincipal -GroupId "Users"

4. Set task settings

Use New-ScheduledTaskSettingsSet to configure repetition, delay, or on-demand options:

$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries

5. Create and register the task

Use Register-ScheduledTask to finalize and apply the task:

Register-ScheduledTask -TaskName "MyUserProfileTask" -Action $action -Trigger $trigger -Principal $principal -Settings $settings

Why use a random delay?

A random delay prevents tasks from running at the same time across machines, reducing load spikes and network congestion.

See the code block below for an example.

$trigger.Delay = (New-TimeSpan -Minutes (Get-Random -Minimum 5 -Maximum 15))

What are real-world use cases for scheduled tasks?

1. Removing per-user software

When software is installed per user (like Firefox or Appx packages), you may need to run a script to remove it from each profile. Creating a scheduled task that runs at logon ensures this happens without manual intervention. 

Here's an example PowerShell script:

# Define a whitelist of apps to keep $whitelist = @("Microsoft.Paint", "Microsoft.Calculator") # Get installed Appx packages $appxPackages = Get-AppxPackage -AllUsers # Remove unwanted packages foreach ($app in $appxPackages) { if ($app.Name -notin $whitelist) { Remove-AppxPackage -Package $app.PackageFullName -AllUsers } }

2. Running custom logon tasks

If you need to apply configuration changes, map network drives, or perform other tasks when a user logs in, a scheduled task can handle these operations automatically.

Important considerations

Before deploying scheduled tasks, keep these in mind:

  • Run level: Ensure that the task runs with the appropriate permissions, especially if modifying system settings.

  • Error handling: Consider adding logging or error handling to capture failures or unexpected behavior.

  • Testing: Always test tasks on a few machines before deploying them across your environment.


If you can use Group Policy, it’s the easiest and most reliable way to manage user-specific actions. But for environments where Group Policy isn’t available, PowerShell scheduled tasks provide a powerful alternative. By using well-defined actions, triggers, and principals, you can automate tasks and manage user environments effectively.

If you’re looking for an even simpler way to manage tasks, PDQ Connect streamlines deployments and scheduled tasks across your organization. Try PDQ Connect free for 14 days to see how easy device management can be.

Loading...

Jordan Hammond fun headshot
Jordan Hammond

Jordan had spent his life wondering why tasks he didn’t like to do had no options to complete themselves. Eventually he had to make that happen on his own. It turned out that he enjoyed making tasks complete themselves, and PDQ thought that is something he should talk about on the internet.

Related articles