WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Scheduler

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Automate the Task Scheduler Using COM


Automating the Task Scheduler

Vista and newer:

Starting in Windows Vista the Task Scheduler received a complete overhaul. Windows Vista provides new features and tools that make the work of software developers easier. Task Scheduler also provides several API changes that give software developers flexibility when developing for Task Scheduler. More importantly it provides new scripting objects that WinBatch developers can use to programmatically access the functionalities that are available in Task Scheduler 2.0. Task Scheduler interfaces now are derived from IDispatch, providing full support for script development. http://msdn.microsoft.com/en-us/library/bb756903.aspx

Windows XP and older:

Schtasks

Windows XP contains the Schtasks command-line tool. http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/NT~Native~Commands~with~WinBatch+Microsoft~Task~Scheduler~Command~Line~Utility.txt

COM Interface - TaskScheduler.dll

The Task Scheduler from the IE Add-ons does not come with the COM interface. You need to download 'Site Server' in order to get TaskScheduler.dll that provides the COM interfaces.
  1. Download the TaskScheduler dll
    https://techsupt.winbatch.com/techsupt/TaskSchedulerDll.zip
  2. Install and Register the Component
    Go to Start|Run and type: regsvr32 "C:\Temp\TaskScheduler\TaskScheduler.dll". You should get a message telling you the component was successfully registered.
  3. Open the WIL Type Viewer
    'C:\Program Files\WinBatch\System\WIL Type Viewer.exe'. Select the 'Viewer' tab and type 'Scheduler.SchAgent' in the edit box then press the 'Get Members' button. You can explore the various Members and Properties of the Object.

Sample Code
Create a new Task
		;Create a Scheduled Task
		oSchAgent = ObjectCreate('Scheduler.SchAgent')
		oSchAgent.Refresh()
		oTask = oSchAgent.CreateTask('Run Notepad')
		oTask.ApplicationName = 'Notepad.exe'
		oTask.Commandline = ''
		oTask.Creator = 'SoAndSo'
		oTask.SetAccountInformation('MyDomain\SoAndSo', '******')
		;Create the trigger
		oTrig = oTask.Triggers.Add 
		oTrig.TriggerType = 1; ttDaily 
		oTrig.BeginDay = ObjectType('DATE', '2008:06:26:03:00:00')
		oTrig.Flags = 0 
		oTrig.StartTime = ObjectType('DATE', '2008:06:26:03:00:00')
		oTrig.Update ()
		oTask.Save

		oSchAgent.Refresh() 

		oTrig = 0
		oTask = 0
		oSchAgent = 0
		Exit
		

Delete a Task
		;Delete a Scheduled Tasks
		oSchAgent = ObjectCreate("Scheduler.SchAgent")
		oSchAgent.Refresh()  
		sMessage = ''
		For index = 1 to oSchAgent.Count
		   objTask = oSchAgent.Job(index)
		   sMessage = sMessage : objTask.Name : @tab
		Next
		m_objScheduler = 0
		taskname = AskItemList('Scheduled Task to Delete', sMessage, @tab, @unsorted, @single )
		oSchAgent.Delete(taskname)
		Pause( Taskname ,'The task has been successfully deleted') 
		exit
		

List Scheduled Tasks
		;List Scheduled Tasks
		oSchAgent = ObjectCreate("Scheduler.SchAgent")
		oSchAgent.Refresh  
		sMessage = ''
		For index = 1 to oSchAgent.Count
		   objTask = oSchAgent.Job(index)
		   sMessage = sMessage : objTask.Name : @tab
		Next
		m_objScheduler = 0
		AskItemList('Scheduled Tasks', sMessage, @tab, @unsorted, @single ) 
		exit
		

List Scheduled Tasks - Details
		;Create a scheduled task List
		outputfile = 'c:\ScheduledTaskListPlus.txt'
		oSchAgent = ObjectCreate("Scheduler.SchAgent")
		oSchAgent.Refresh  
		sMessage = ''
		For index = 1 to oSchAgent.Count
		   objTask = oSchAgent.Job(index)
			sMessage = sMessage : @crlf: @crlf:  '** DETAILS ** ': @crlf
		   sMessage = sMessage : 'Name = ' : objTask.Name : @crlf
			sMessage = sMessage : 'Comment = ' : objTask.Comment : @crlf
			sMessage = sMessage : 'Creator = ' : objTask.Creator : @crlf
			sMessage = sMessage : 'ApplicationName = ' : objTask.ApplicationName : @crlf
			sMessage = sMessage : 'CommandLine = ' : objTask.CommandLine : @crlf
			sMessage = sMessage : 'WorkingDirectory = ' : objTask.WorkingDirectory  : @crlf
			sMessage = sMessage : 'MaxRunTime = ' : objTask.MaxRunTime : @crlf
			sMessage = sMessage : 'NextRunTime = ' : objTask.NextRunTime : @crlf
		
			sMessage = sMessage : @crlf: @crlf:  '** FLAGS **' : @crlf
			sFlags = objTask.Flags
		   if sFlags &  1 
				sMessage = sMessage : "TASK_FLAG_INTERACTIVE" : @crlf
			end if
			if sFlags & 2 
				sMessage = sMessage : "TASK_FLAG_DELETE_WHEN_DONE" :@crlf
			end if
			if sFlags &  4 
				sMessage = sMessage : "TASK_FLAG_DISABLED" : @crlf
			end if
			if sFlags &  16 
				sMessage = sMessage : "TASK_FLAG_START_ONLY_IF_IDLE" : @crlf
			end if
			if sFlags &  32 
				sMessage = sMessage : "TASK_FLAG_KILL_ON_IDLE_END" : @crlf
			end if
			if sFlags &  64 
				sMessage = sMessage : "TASK_FLAG_DONT_START_IF_ON_BATTERIES"  : @crlf
			end if
			if sFlags &  128 
				sMessage = sMessage : "TASK_FLAG_KILL_IF_GOING_ON_BATTERIES"  : @crlf
			end if
			if sFlags &  256
				sMessage = sMessage : "TASK_FLAG_RUN_ONLY_IF_DOCKED"  : @crlf
			end if
			if sFlags &  512 
				sMessage = sMessage : "TASK_FLAG_HIDDEN" : @crlf
			end if
			if sFlags &  1024 
				sMessage = sMessage : "TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET"  : @crlf
			end if
			if sFlags &  2048 
				sMessage = sMessage : "TASK_FLAG_RESTART_ON_IDLE_RESUME"  : @crlf
			end if
			if sFlags & 4096 
		      sMessage = sMessage : "TASK_FLAG_SYSTEM_REQUIRED"  : @crlf
			end if
			if sFlags & 8192 
		      sMessage = sMessage : "TASK_FLAG_RUN_ONLY_IF_LOGGED_IN"  : @crlf
			end if
			
			sMessage =  sMessage : @crlf: @crlf:  "** STATUS** " : @crlf
			sStatus = objTask.Status
			Select sStatus
				Case 267008
					sMessage = sMessage : "SCHED_S_TASK_READY" : @crlf
					break
				Case 267009
					sMessage = sMessage : "SCHED_S_TASK_RUNNING" : @crlf
					break
				Case 267010
					sMessage = sMessage : "SCHED_S_TASK_DISABLED" : @crlf
					break
				Case 267011
					sMessage = sMessage : "SCHED_S_TASK_HAS_NOT_RUN" : @crlf
					break
			   Case 267012
					sMessage = sMessage : "SCHED_S_TASK_NO_MORE_RUNS" : @crlf
					break
				Case 267013
					sMessage = sMessage : "SCHED_S_TASK_NOT_SCHEDULED": @crlf
					break 
				Case 267014
					sMessage = sMessage : "SCHED_S_TASK_TERMINATED": @crlf
					break 
				Case 267015
					sMessage = sMessage : "SCHED_S_TASK_NO_VALID_TRIGGERS": @crlf
					break 
				Case 267016
					sMessage = sMessage : "SCHED_S_EVENT_TRIGGER": @crlf
					break 
			EndSelect
			
			sMessage =  sMessage : @crlf: @crlf : '_________________________________________' : @crlf: @crlf
		Next
		m_objScheduler = 0
		
		FilePut(outputfile, sMessage)
		
		Run(outputfile,'')
		exit
		

Run a Scheduled Task
		;Run a Scheduled Task
		oSchAgent = ObjectCreate('Scheduler.SchAgent')
		oSchAgent.Refresh  
		sMessage = ''
		For index = 1 to oSchAgent.Count
		   objTask = oSchAgent.Job(index)
		   sMessage = sMessage : objTask.Name : @tab
		Next
		m_objScheduler = 0
		taskname = AskItemList('Choose Scheduled Task to Run', sMessage, @tab, @unsorted, @single ) 
		objTask = oSchAgent.Job(taskname)
		objTask.Run
		exit
		

Article ID:   W18267
Filename:   Automate the Task Scheduler Using COM.txt
File Created: 2019:08:14:09:34:20
Last Updated: 2019:08:14:09:34:20