13

I have a main python script that generates a GUI, and through that GUI I want the user to be able to create, amend, and delete schedules managed by the windows task scheduler.

I_do_python
  • 1,196
  • 4
  • 15
  • 31

3 Answers3

11

This code creates a task which will run in 5 minutes (uses pywin32):

import datetime
import win32com.client

scheduler = win32com.client.Dispatch('Schedule.Service')
scheduler.Connect()
root_folder = scheduler.GetFolder('\\')
task_def = scheduler.NewTask(0)

# Create trigger
start_time = datetime.datetime.now() + datetime.timedelta(minutes=5)
TASK_TRIGGER_TIME = 1
trigger = task_def.Triggers.Create(TASK_TRIGGER_TIME)
trigger.StartBoundary = start_time.isoformat()

# Create action
TASK_ACTION_EXEC = 0
action = task_def.Actions.Create(TASK_ACTION_EXEC)
action.ID = 'DO NOTHING'
action.Path = 'cmd.exe'
action.Arguments = '/c "exit"'

# Set parameters
task_def.RegistrationInfo.Description = 'Test Task'
task_def.Settings.Enabled = True
task_def.Settings.StopIfGoingOnBatteries = False

# Register task
# If task already exists, it will be updated
TASK_CREATE_OR_UPDATE = 6
TASK_LOGON_NONE = 0
root_folder.RegisterTaskDefinition(
    'Test Task',  # Task name
    task_def,
    TASK_CREATE_OR_UPDATE,
    '',  # No user
    '',  # No password
    TASK_LOGON_NONE)

More info on tasks and their properties here: https://docs.microsoft.com/en-us/windows/desktop/taskschd/task-scheduler-objects

xuhcc
  • 2,230
  • 23
  • 23
6

PyWin32 provides an interface to the Task Scheduler in win32com.taskscheduler. You can see an example of it's use here:

Also @FredP linked to a good example that's much simpler:

There is also an interesting tidbit in the wmi module's cookbook about scheduling a job, although it doesn't appear to use the Task Scheduler:

Mattwmaster58
  • 1,741
  • 2
  • 18
  • 31
Mike Driscoll
  • 32,008
  • 7
  • 41
  • 85
  • Warning: Do not use the WMI method. The service which it depends on seems to be deprecated and not enabled by default (Though you can enable it via registry) since Windows 8: https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-scheduledjob – xendi Sep 12 '20 at 22:43
5

Just to round out the option list here... How about just calling the windows command line?

import os

os.system(r'SchTasks /Create /SC DAILY /TN "My Task" /TR "C:mytask.bat" /ST 09:00')

You can launch any executable, batch file, or even another python script - assuming the system is set to execute python...

schtasks has a rich list of options and capabilities...https://docs.microsoft.com/en-us/windows/win32/taskschd/schtasks

Lê Quang Duy
  • 757
  • 7
  • 14
jaytate
  • 73
  • 2
  • 4