Windows OS Hub
  • Windows Server
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • Windows Server 2008 R2
    • SCCM
  • Active Directory
    • Active Directory Domain Services (AD DS)
    • Group Policies
  • Windows Clients
    • Windows 11
    • Windows 10
    • Windows 8
    • Windows 7
    • Windows XP
    • MS Office
    • Outlook
  • Virtualization
    • VMWare
    • Hyper-V
    • KVM
  • PowerShell
  • Exchange
  • Cloud
    • Azure
    • Microsoft 365
    • Office 365
  • Linux
    • CentOS
    • RHEL
    • Ubuntu
  • Home
  • About

Windows OS Hub

  • Windows Server
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • Windows Server 2008 R2
    • SCCM
  • Active Directory
    • Active Directory Domain Services (AD DS)
    • Group Policies
  • Windows Clients
    • Windows 11
    • Windows 10
    • Windows 8
    • Windows 7
    • Windows XP
    • MS Office
    • Outlook
  • Virtualization
    • VMWare
    • Hyper-V
    • KVM
  • PowerShell
  • Exchange
  • Cloud
    • Azure
    • Microsoft 365
    • Office 365
  • Linux
    • CentOS
    • RHEL
    • Ubuntu

 Windows OS Hub / PowerShell / How to Create and Manage Scheduled Tasks with PowerShell?

May 10, 2023 PowerShellWindows Server 2016

How to Create and Manage Scheduled Tasks with PowerShell?

Most users and administrators use the taskschd.msc graphical interface console to create and manage scheduled tasks on Windows. However, in various scripts and automated flows, it is much more convenient to use the PowerShell features to create scheduled tasks. In this article, we’ll show how to create and manage Windows Scheduler tasks using PowerShell.

Contents:
  • Managing Scheduled Tasks on Windows via PowerShell
  • Creating Scheduled Task with Windows PowerShell
  • How to View and Run Scheduled Tasks with PowerShell?
  • How to Export and Import Scheduled Tasks via XML Files?

Managing Scheduled Tasks on Windows via PowerShell

The ScheduledTasks PowerShell module is used to manage scheduled tasks on Windows 10/Windows Server 2016. You can list the cmdlets in a module as follows:

Get-Command -Module ScheduledTasks

  • Disable-ScheduledTask
  • Enable-ScheduledTask
  • Export-ScheduledTask
  • Get-ClusteredScheduledTask
  • Get-ScheduledTask
  • Get-ScheduledTaskInfo
  • New-ScheduledTask
  • New-ScheduledTaskAction
  • New-ScheduledTaskPrincipal
  • New-ScheduledTaskSettingsSet
  • New-ScheduledTaskTrigger
  • Register-ClusteredScheduledTask
  • Register-ScheduledTask
  • Set-ClusteredScheduledTask
  • Set-ScheduledTask
  • Start-ScheduledTask
  • Stop-ScheduledTask
  • Unregister-ClusteredScheduledTask
  • Unregister-ScheduledTask

managing Scheduled Tasks via powershell

Hint. Previously, the built-in console tool schtasks.exe was used in Windows to create and manage scheduler jobs.

Creating Scheduled Task with Windows PowerShell

In modern versions of PowerShell (starting with PowerShell 3.0 on Windows Server 2012/Windows 8), you can use the New-ScheduledTaskTrigger and Register-ScheduledTask cmdlets to create scheduled tasks.

Suppose, we need to create a scheduled task that should run during startup (or at a specific time) and execute some PowerShell script or command. Let’s create a scheduled task named StartupScript1. This task should run the PowerShell script file C:\PS\StartupScript.ps1 at 10:00 AM every day. The task will be executed with elevated privileges (checkbox “Run with highest privileges”) under the SYSTEM account.

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript1.ps1"
Register-ScheduledTask -TaskName "StartupScript1" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

If the task was created successfully, the status “Ready” appears.

create sheduled task with PowerShell cmdlet Register-ScheduledTask

Your PowerShell script will run on the specified schedule. If you have a PowerShell Execution Policy enabled on your computer that prevents PS1 scripts from executing, you can run a PowerShell script from a scheduled task with the –Bypass parameter.

Use this code when creating a new task:

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1"

Tip. If you want the task to run every time during the computer startup, the first command has to be as follows:
$Trigger= New-ScheduledTaskTrigger -AtStartup
If you want to run a task when a user logs on:
$Trigger= New-ScheduledTaskTrigger -AtLogon

Open the taskschd.msc console and make sure you have a new scheduler task in the Task Scheduler Library.

new task appears in the task sheduler console

In Powershell 2.0 (Windows 7, Windows Server 2008 R2), to create a scheduled task from PowerShell you can use the Schedule.Service COM interface (or update the PowerShell version). In this example, we create a scheduled task that will execute the specific file containing PowerShell script during startup. The task is performed with the NT AUTHORITY\SYSTEM privileges.

$TaskName = "NewPsTask"
$TaskDescription = "Running PowerShell script from Task Scheduler"
$TaskCommand = "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe"
$TaskScript = "C:\PS\StartupScript.ps1"
$TaskArg = "-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $TaskScript"
$TaskStartTime = [datetime]::Now.AddMinutes(1)
$service = new-object -ComObject("Schedule.Service")
$service.Connect()
$rootFolder = $service.GetFolder("\")
$TaskDefinition = $service.NewTask(0)
$TaskDefinition.RegistrationInfo.Description = "$TaskDescription"
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$triggers = $TaskDefinition.Triggers
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)

How to View and Run Scheduled Tasks with PowerShell?

You can list all active scheduled tasks on Windows with the command:

Get-ScheduledTask -TaskPath | ? state -ne Disabled

To get information about a specific task:

Get-ScheduledTask CheckServiceState| Get-ScheduledTaskInfo

LastRunTime : 4/7/2021 10:00:00 AM
LastTaskResult : 267011
NextRunTime : 4/8/2021 10:00:00 AM
NumberOfMissedRuns : 0
TaskName : CheckServiceState
TaskPath : \
PSComputerName :

Get-ScheduledTaskInfo powershell

You can disable this task:

Get-ScheduledTask CheckServiceState | Disable-ScheduledTask

To enable a task:

Get-ScheduledTask CheckServiceState | Enable-ScheduledTask

To run the task immediately (without waiting for the schedule), run:

Start-ScheduledTask CheckServiceState

disable/enable/start sheduled task manually

To completely remove a task from the Task Scheduler library:

Unregister-ScheduledTask -TaskName CheckServiceState

If you need to change the username from which the task is launched and, for example, the compatibility mode, use the Set-ScheduledTask cmdlet:

$task_user = New-ScheduledTaskPrincipal -UserId woshub\j.abrams' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings

If you receive the error “Set-ScheduledTask: No mapping between account names and security IDs was done” check that you provide the correct username.

Set-ScheduledTask: No mapping between account names and security IDs was done

How to Export and Import Scheduled Tasks via XML Files?

PowerShell allows you to export the current settings of any scheduled task into a text XML file. So you can export the parameters of any task and deploy a task to other computers. The task may be exported both from the Task Scheduler GUI and from PowerShell console.

Here is the command to export the task with the name StartupScript to the file StartupScript.xml:

Export-ScheduledTask StartupScript | out-file c:\tmp\StartupScript.xml

Export-ScheduledTask - xml task

The Export-ScheduledTask cmdlet is not available in PowerShell 2.0, so in Windows 7 / Windows Server 2008 R2 it’s better to use the built-in tool schtasks to export the task settings and redirect the result into a text file:

schtasks /query /tn "NewPsTask" /xml >> "c:\tmp\NewPsTask.xml"

After the scheduled task settings are exported to the XML file, it can be imported to any network computer using the GUI, SchTasks.exe or PowerShell.

Register-ScheduledTask cmdlet can help you to import task settings from an XML file and register it:
Register-ScheduledTask -Xml (Get-Content “\\mun-fs01\public\NewPsTask.xml” | out-string) -TaskName "NewPsTask"

In PowerShell 2.0 (Windows 7/Server 2008 R2), it is easier to import a task using the schtasks tool. The first command creates a new task. The second will run it immediately (without waiting for the event trigger to activate it).

schtasks /create /tn "NewPsTask" /xml "\\Srv1\public\NewPsTask.xml" /ru corp\skrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"

Please, note that this example uses the credentials of the account that is used to run the task. If the credentials are not specified, because they are not stored in the job, they will be requested when importing.

0 comment
3
Facebook Twitter Google + Pinterest
previous post
Updating Windows VM Templates on VMWare with PowerShell
next post
Enable Windows Lock Screen after Inactivity via GPO

Related Reading

Zabbix: How to Get Data from PowerShell Scripts

October 27, 2023

Tracking Printer Usage with Windows Event Viewer Logs

October 19, 2023

PowerShell: Configure Certificate-Based Authentication for Exchange Online (Azure)

October 15, 2023

How to Query and Change Teams User Presence...

October 8, 2023

Installing Language Pack in Windows 10/11 with PowerShell

September 15, 2023

Leave a Comment Cancel Reply

Categories

  • Active Directory
  • Group Policies
  • Exchange Server
  • Microsoft 365
  • Azure
  • Windows 11
  • Windows 10
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • PowerShell
  • VMWare
  • Hyper-V
  • Linux
  • MS Office

Recent Posts

  • Zabbix: How to Get Data from PowerShell Scripts

    October 27, 2023
  • Tracking Printer Usage with Windows Event Viewer Logs

    October 19, 2023
  • PowerShell: Configure Certificate-Based Authentication for Exchange Online (Azure)

    October 15, 2023
  • Reset Root Password in VMware ESXi

    October 12, 2023
  • How to Query and Change Teams User Presence Status with PowerShell

    October 8, 2023
  • How to Increase Size of Disk Partition in Ubuntu

    October 5, 2023
  • How to Use Ansible to Manage Windows Machines

    September 25, 2023
  • Installing Language Pack in Windows 10/11 with PowerShell

    September 15, 2023
  • Configure Email Forwarding for Mailbox on Exchange Server/Microsoft 365

    September 14, 2023
  • How to View and Change BIOS (UEFI) Settings with PowerShell

    September 13, 2023

Follow us

  • Facebook
  • Twitter
  • Telegram
Popular Posts
  • Manage Windows Updates with PSWindowsUpdate PowerShell Module
  • Configuring Port Forwarding in Windows
  • Start Menu or Taskbar Search Not Working in Windows 10/11
  • Get-ADUser: Find Active Directory User Info with PowerShell
  • Adding Drivers into VMWare ESXi Installation Image
  • How to Hide Installed Programs in Windows 10 and 11
  • Configuring SFTP (SSH FTP) Server on Windows
Footer Logo

@2014 - 2023 - Windows OS Hub. All about operating systems for sysadmins


Back To Top