This VBScript example shows how to use the programmatic API to download "templates" for task and host configuration elements, modify them and resubmit/run them as a temporary task.
However, you would first likely want to spend a few moments setting up one or two "template tasks" and at least one "template host" to use. This requires the use of MOVEit Automation Admin and is described below.
First, create a new "template host" of the appropriate type on MOVEit DMZ. If you are unsure which type to use (because you may be switching between different types of hosts at runtime), create a host of type "FTP".
For detailed instructions, see the "Creating a Template Host" section below."
Next you should create one or two "template tasks" that reference your template host. You may find it easier to use two template tasks (one for uploading and one for downloading) if one of your endpoints is a Windows file system (including UNCs) because Windows sources and destinations are treated a little differently than non-Windows sources.
For detailed instructions, see the "Creating Template Tasks" section below."
To gain access to MOVEit Automation, MOVEit Automation API will need to authenticate with the proper credentials.
If you plan to submit temporary tasks involving existing hosts, your MOVEit Automation API user only needs "View/Select" permission to those existing hosts but "View/Select/Run/Add/Edit/Delete" permission on the template tasks. If you plan to submit temporary tasks involving ad hoc hosts, your MOVEit Automation API user needs "View/Select/Add/Edit/Delete" permission on your template host and "View/Select/Run/Add/Edit/Delete" permission on the template tasks.
Alternatively, you can just grant your MOVEit Automation API full access to MOVEit Automation and avoid a task/host permission structure.
For detailed instructions, see the "Creating Appropriate Permissions for MOVEit Automation API" section below."
Finally, you are ready to write your own MOVEit Automation API application. This can be done in any language that supports Windows COM components (or Java if you are using the Java classes).
Generally, MOVEit Automation API applications that download template configurations, make changes to them and resubmit/run them as "temporary tasks" will perform the same set of general operations:
- Use the ".GetItemXML" method to get local copies of a template host and template task configuration.
- Use the ".SetAttribute" method to override the hostname, path, filenames, etc. in the template host (ad hoc transfers only) and template task. This will yield an XML string containing a "temporary task" definition.
- Optionally, use the ".SetMaxTasks" method to make sure you are not flooding MOVEit Automation with requests in an asynchronous task submission environment.
- Use the ".StartNewTask" method to submit/run your temporary task. (Optionally, watch for an error code of "5120" to indicate "too many tasks in mix" and resubmit appropriately.)
- Use the ".WaitForTasks" and related methods to monitor the task and report or act on its results.
The two examples provided below perform similar operations, but one references existing host definitions while the other accesses remote servers for which no host definition exists.
Option Explicit ' Echo a message to the console Sub ShowMsg(MyText) Dim TheSplit TheSplit = Split(Now()," ") WScript.Echo TheSplit(1) & " - " & MyText End Sub ' Echo a message to the console along with last API error (if any) Sub ShowMsg2(MyText,oAPI) Dim TheSplit TheSplit = Split(Now()," ") if oAPI.GetErrorCode = 0 then WScript.Echo TheSplit(1) & " - " & MyText else WScript.Echo TheSplit(1) & " - " & MyText & " Error#" & oAPI.GetErrorCode & ": " & oAPI.GetErrorDescription end if End Sub ' Display the contents of a WaitResult object Sub DumpWaitResult(oAPI,oWaitResult) Dim TaskRunInfoXML ShowMsg "Task Run Results:" ShowMsg " Name: " & oWaitResult.TaskName ShowMsg " ID: " & oWaitResult.TaskID ShowMsg " Time: " & oWaitResult.TaskNominalStartTime & " to " & oWaitResult.TaskTimeEnded if oWaitResult.TaskErrorCode = 0 then ShowMsg " Error: (none)" else ShowMsg " Error: " & oWaitResult.TaskErrorCode & ": " & oWaitResult.TaskErrorDescription end if TaskRunInfoXML = oAPI.GetTaskRunInfoXML(oWaitResult) ShowMsg " Xfer: " & oAPI.GetValue(TaskRunInfoXML, "FilesSent", 1) & _ " files, " & _ oAPI.GetValue(TaskRunInfoXML, "TotalBytesSent", 1) & _ " bytes" 'ShowMsg "-= GetTaskRunInfoXML =-" 'ShowMsg TaskRunInfoXML 'ShowMsg "-= GetTaskRunXfersXML =-" 'ShowMsg oAPI.GetTaskRunXfersXML(oWaitResult) End Sub ' This main routine does all the work for the script. Sub Main Dim bOK, TryTasks, MaxTasks Dim TaskHnd, TaskHndPipe, StartedTasks Dim WaitResult, TaskName, WaitSecs Dim TaskXML, iii, HostXML, HostID, TaskLimit, TaskID Dim oAPI Set oAPI = CreateObject("MICentralAPICOM.MICentralAPI") ShowMsg("Starting demonstration using existing hosts.") MaxTasks = 3 TryTasks = 5 'On Error Resume Next ' Sign on and connect oAPI.SetHost("localhost") oAPI.SetUser("miadmin") oAPI.SetPassword("password") bOK = oAPI.Connect() if NOT bOK then ShowMsg2 "Could not sign on to MOVEit Automation!",oAPI Exit Sub end if ShowMsg("Running API version " & oAPI.GetAPIVersion() & _ " on Central version " & oAPI.GetCentralVersion() ) ' Use the ".GetItemXML" method to get a local copy of a template task configuration. TaskXML = oAPI.GetItemXML("Task", "Template Task - Download from FTP", True) if TaskXML="" then ShowMsg2 "Failed to read template task configuration! ", oAPI Exit Sub else ShowMsg "Read template task configuration; " & Len(TaskXML) & " bytes." end if ' Look up the HostID of a named FTP site HostXML = oAPI.GetItemXML("Host", "Hewlett Packard Public FTP Site", True) if HostXML="" then ShowMsg2 "Failed to read target host configuration! ", oAPI Exit Sub else ShowMsg "Read target host configuration; " & Len(HostXML) & " bytes." end if HostID = oAPI.GetAttribute(HostXML, "FTP", 1, "ID") ' Use the ".SetAttribute" method to override the hostID, path, filenames, etc. in the ' template task. This will yield an XML string containing a "temporary task" definition. TaskID = "9824524" ' 8-digit values (10,000,000-99,999,999) are safe (we'll add the 8th later) TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "HostID", HostID) TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "Type", "FTP") TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "Path", "/pub/visualize") TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "FileMask", "TopTools*.*") TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "DeleteOrig", "0") 'Turn off attempt to delete TaskXML = oAPI.SetAttribute(TaskXML, "Destination", 1, "Path", "D:\temp\hpdump") TaskXML = oAPI.SetAttribute(TaskXML, "Destination", 1, "FileName", "[yyyy][mm][dd]-[OrigName]") TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "Name", _ "Download from HP FTP site using existing host") TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "ID", TaskID & "0") ' Submit one task and wait for results ShowMsg "Temporary task configuration contains " & Len(TaskXML) & " bytes." TaskHnd = oAPI.StartNewTask(TaskXML) If "" = TaskHnd Then ShowMsg2 "Temporary task failed to start", oAPI Exit Sub Else ShowMsg "Task " & TaskHnd & " has started" End If WaitSecs = 120 Set WaitResult = oAPI.WaitForTasks(TaskHnd, WaitSecs) DumpWaitResult oAPI, WaitResult ' Now set a limit of 3 tasks in the mix and try to submit 5 in quick succession TaskLimit = oAPI.SetMaxTasks(MaxTasks) StartedTasks = 0 ShowMsg "Current Task Limit is " & oAPI.GetMaxTasks() TaskHndPipe = "" For iii = 1 to TryTasks TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "Name", _ "Download from HP FTP site using existing host (" & iii & " of " & TryTasks & ")") TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "ID", TaskID & iii) TaskHnd = oAPI.StartNewTask(TaskXML) If "" = TaskHnd Then ShowMsg2 "Temporary task (" & iii & " of " & TryTasks & ") failed to start", oAPI Else ShowMsg "Temporary task (" & iii & " of " & TryTasks & ") has started" StartedTasks = StartedTasks + 1 TaskHndPipe = TaskHndPipe & TaskHnd & "|" End If Next 'iii ' Check on the tasks we put into the mix Dim LastWaitResult LastWaitResult = "NotBlank" ' Otherwise it matches too soon! ShowMsg "TaskHndPipe = " & TaskHndPipe For iii = 1 to StartedTasks Set WaitResult = oAPI.WaitForTasks(TaskHndPipe, WaitSecs) if LastWaitResult = WaitResult.TaskID then ' Ignore it and wait for the next one iii = iii - 1 WScript.Sleep(250) else DumpWaitResult oAPI, WaitResult LastWaitResult = WaitResult.TaskID ' Take result found out of list we're looking for TaskHndPipe = Replace(Replace(TaskHndPipe, WaitResult.TaskID & "^" & _ WaitResult.TaskNominalStartTime, ""), "||","|") 'ShowMsg "TaskHndPipe = " & TaskHndPipe end if Next 'iii ShowMsg("Ending demonstration using existing hosts.") set oAPI = Nothing End Sub Main
Sample Output
4:30:47 - Starting demonstration using existing hosts. 4:30:47 - Running API version 4.9.1.0 on Central version 4.9.2.5 4:30:47 - Read template task configuration; 469 bytes. 4:30:47 - Read target host configuration; 392 bytes. 4:30:47 - Temporary task configuration contains 488 bytes. 4:30:47 - Task 98245240^2007-10-16 16:30:47 has started 4:30:51 - Task Run Results: 4:30:51 - Name: Download from HP FTP site using existing host 4:30:51 - ID: 98245240 4:30:51 - Time: 2007-10-16 16:30:47 to 2007-10-16 16:30:50 4:30:51 - Error: (none) 4:30:51 - Xfer: 2 files, 170952 bytes 4:30:51 - Current Task Limit is 3 4:30:51 - Temporary task (1 of 5) has started 4:30:52 - Temporary task (2 of 5) has started 4:30:52 - Temporary task (3 of 5) has started 4:30:53 - Temporary task (4 of 5) failed to start Error#5120: Running this task would exceed the maximum simultaneous tasks specified in the command. 4:30:53 - Temporary task (5 of 5) failed to start Error#5120: Running this task would exceed the maximum simultaneous tasks specified in the command. 4:30:53 - TaskHndPipe = 98245241^2007-10-16 16:30:51|98245242^2007-10-16 16:30:5 2|98245243^2007-10-16 16:30:52| 4:31:01 - Task Run Results: 4:31:01 - Name: Download from HP FTP site using existing host (1 of 5) 4:31:01 - ID: 98245241 4:31:01 - Time: 2007-10-16 16:30:51 to 2007-10-16 16:30:59 4:31:01 - Error: (none) 4:31:01 - Xfer: 2 files, 170952 bytes 4:31:05 - Task Run Results: 4:31:05 - Name: Download from HP FTP site using existing host (3 of 5) 4:31:05 - ID: 98245243 4:31:05 - Time: 2007-10-16 16:30:52 to 2007-10-16 16:31:05 4:31:05 - Error: (none) 4:31:05 - Xfer: 2 files, 170952 bytes 4:31:21 - Task Run Results: 4:31:21 - Name: Download from HP FTP site using existing host (2 of 5) 4:31:21 - ID: 98245242 4:31:21 - Time: 2007-10-16 16:30:52 to 2007-10-16 16:31:20 4:31:21 - Error: (none) 4:31:21 - Xfer: 2 files, 170952 bytes 4:31:21 - Ending demonstration using existing hosts.
Option Explicit ' Echo a message to the console Sub ShowMsg(MyText) Dim TheSplit TheSplit = Split(Now()," ") WScript.Echo TheSplit(1) & " - " & MyText End Sub ' Echo a message to the console along with last API error (if any) Sub ShowMsg2(MyText,oAPI) Dim TheSplit TheSplit = Split(Now()," ") if oAPI.GetErrorCode = 0 then WScript.Echo TheSplit(1) & " - " & MyText else WScript.Echo TheSplit(1) & " - " & MyText & " Error#" & oAPI.GetErrorCode & ": " & oAPI.GetErrorDescription end if End Sub ' Display the contents of a WaitResult object Sub DumpWaitResult(oAPI,oWaitResult) Dim TaskRunInfoXML ShowMsg "Task Run Results:" ShowMsg " Name: " & oWaitResult.TaskName ShowMsg " ID: " & oWaitResult.TaskID ShowMsg " Time: " & oWaitResult.TaskNominalStartTime & " to " & oWaitResult.TaskTimeEnded if oWaitResult.TaskErrorCode = 0 then ShowMsg " Error: (none)" else ShowMsg " Error: " & oWaitResult.TaskErrorCode & ": " & oWaitResult.TaskErrorDescription end if TaskRunInfoXML = oAPI.GetTaskRunInfoXML(oWaitResult) ShowMsg " Xfer: " & oAPI.GetValue(TaskRunInfoXML, "FilesSent", 1) & _ " files, " & _ oAPI.GetValue(TaskRunInfoXML, "TotalBytesSent", 1) & _ " bytes" 'ShowMsg "-= GetTaskRunInfoXML =-" 'ShowMsg TaskRunInfoXML 'ShowMsg "-= GetTaskRunXfersXML =-" 'ShowMsg oAPI.GetTaskRunXfersXML(oWaitResult) End Sub ' This main routine does all the work for the script. Sub Main Dim bOK, TryTasks, MaxTasks Dim TaskHnd, TaskHndPipe, StartedTasks Dim WaitResult, TaskName, WaitSecs Dim TaskXML, iii, HostXML, HostID, TaskLimit, TaskID, ReadyXML Dim oAPI ShowMsg("Starting demonstration using ad hoc hosts.") Set oAPI = CreateObject("MICentralAPICOM.MICentralAPI") MaxTasks = 3 TryTasks = 5 'On Error Resume Next ' Sign on and connect oAPI.SetHost("localhost") oAPI.SetUser("miadmin") oAPI.SetPassword("password") bOK = oAPI.Connect() if NOT bOK then ShowMsg2 "Could not sign on to MOVEit Automation!",oAPI Exit Sub end if ShowMsg("Running API version " & oAPI.GetAPIVersion() & _ " on Central version " & oAPI.GetCentralVersion() ) ' Use the ".GetItemXML" method to get a local copy of a template task configuration. TaskXML = oAPI.GetItemXML("Task", "Template Task - Download from FTP", True) if TaskXML="" then ShowMsg2 "Failed to read template task configuration! ", oAPI Exit Sub else ShowMsg "Read template task configuration; " & Len(TaskXML) & " bytes." end if ' Use the ".GetItemXML" method to get a local copy of a template host configuration. HostXML = oAPI.GetItemXML("Host", "Template FTP Host", True) if HostXML="" then ShowMsg2 "Failed to read target host configuration! ", oAPI Exit Sub else ShowMsg "Read target host configuration; " & Len(HostXML) & " bytes." end if ' Use the ".SetAttribute" method to override the hostname/IP, path, filenames, etc. in the ' template host and task. ' This will yield XML strings containing a "temporary task" definition. TaskID = "9824524" ' 8-digit values (10,000,000-99,999,999) are safe (we'll add the 8th later) HostID = "41243513" ' 8-digit values (10,000,000-99,999,999) are safe HostXML = oAPI.SetAttribute(HostXML, "FTP", 1, "ID", HostID) HostXML = oAPI.SetAttribute(HostXML, "FTP", 1, "Host", "ftp.hp.com") HostXML = oAPI.SetAttribute(HostXML, "FTP", 1, "DefRetryCount", "0") 'For instant response HostXML = oAPI.SetAttribute(HostXML, "FTP", 1, "DefUsername", "anonymous") HostXML = oAPI.SetAttribute(HostXML, "FTP", 1, "DefPassword", _ oAPI.EncryptPW("sample@example.com")) 'Plaintext password will not work TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "HostID", HostID) TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "Path", "/pub/visualize") TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "FileMask", "TopTools*.*") TaskXML = oAPI.SetAttribute(TaskXML, "Source", 1, "DeleteOrig", "0") 'Turn off attempt to delete TaskXML = oAPI.SetAttribute(TaskXML, "Destination", 1, "Path", "D:\temp\hpdump") TaskXML = oAPI.SetAttribute(TaskXML, "Destination", 1, "FileName", "[yyyy][mm][dd]-[OrigName]") TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "Name", _ "Download from HP FTP site using ad hoc host") TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "ID", TaskID & "0") 'Append related host XML to temporary task (needs surrounding "Hosts" tag) ReadyXML = TaskXML & "<Hosts>" & HostXML & "</Hosts>" ' Submit one task and wait for results ShowMsg "Temporary task configuration contains " & Len(ReadyXML) & " bytes." TaskHnd = oAPI.StartNewTask(ReadyXML) If TaskHnd = "" Then ShowMsg2 "Temporary task failed to start", oAPI Exit Sub Else ShowMsg "Task " & TaskHnd & " has started" End If WaitSecs = 120 Set WaitResult = oAPI.WaitForTasks(TaskHnd, WaitSecs) DumpWaitResult oAPI, WaitResult ' Now set a limit of 3 tasks in the mix and try to submit 5 in quick succession TaskLimit = oAPI.SetMaxTasks(MaxTasks) StartedTasks = 0 ShowMsg "Current Task Limit is " & oAPI.GetMaxTasks() TaskHndPipe = "" For iii = 1 to TryTasks TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "Name", _ "Download from HP FTP site using ad hoc host (" & iii & " of " & TryTasks & ")") TaskXML = oAPI.SetAttribute(TaskXML, "Task", 1, "ID", TaskID & iii) ReadyXML = TaskXML & ">Hosts<" & HostXML & ">/Hosts<" TaskHnd = oAPI.StartNewTask(ReadyXML) If TaskHnd = "" Then ShowMsg2 "Temporary task (" & iii & " of " & TryTasks & ") failed to start", oAPI Else ShowMsg "Temporary task (" & iii & " of " & TryTasks & ") has started" StartedTasks = StartedTasks + 1 TaskHndPipe = TaskHndPipe & TaskHnd & "|" End If Next 'iii ' Check on the tasks we put into the mix Dim LastWaitResult LastWaitResult = "NotBlank" ' Otherwise it matches too soon! ShowMsg "TaskHndPipe = " & TaskHndPipe For iii = 1 to StartedTasks Set WaitResult = oAPI.WaitForTasks(TaskHndPipe, WaitSecs) if LastWaitResult = WaitResult.TaskID then ' Ignore it and wait for the next one iii = iii - 1 WScript.Sleep(250) else DumpWaitResult oAPI, WaitResult LastWaitResult = WaitResult.TaskID ' Take result found out of list we're looking for TaskHndPipe = Replace(Replace(TaskHndPipe, WaitResult.TaskID & "^" & _ WaitResult.TaskNominalStartTime, ""), "||","|") 'ShowMsg "TaskHndPipe = " & TaskHndPipe end if Next 'iii ShowMsg("Ending demonstration using ad hoc hosts.") set oAPI = Nothing End Sub Main
Sample Output
4:46:10 - Starting demonstration using ad hoc hosts. 4:46:10 - Running API version 4.9.1.0 on Central version 4.9.2.5 4:46:10 - Read template task configuration; 469 bytes. 4:46:10 - Read target host configuration; 478 bytes. 4:46:10 - Temporary task configuration contains 1014 bytes. 4:46:10 - Task 98245240^2007-10-16 16:46:10 has started 4:46:14 - Task Run Results: 4:46:14 - Name: Download from HP FTP site using ad hoc host 4:46:14 - ID: 98245240 4:46:14 - Time: 2007-10-16 16:46:10 to 2007-10-16 16:46:13 4:46:14 - Error: (none) 4:46:14 - Xfer: 2 files, 170952 bytes 4:46:14 - Current Task Limit is 3 4:46:14 - Temporary task (1 of 5) has started 4:46:15 - Temporary task (2 of 5) has started 4:46:15 - Temporary task (3 of 5) has started 4:46:15 - Temporary task (4 of 5) failed to start Error#5120: Running this task would exceed the maximum simultaneous tasks specified in the command. 4:46:16 - Temporary task (5 of 5) failed to start Error#5120: Running this task would exceed the maximum simultaneous tasks specified in the command. 4:46:16 - TaskHndPipe = 98245241^2007-10-16 16:46:14|98245242^2007-10-16 16:46:1 5|98245243^2007-10-16 16:46:15| 4:46:20 - Task Run Results: 4:46:20 - Name: Download from HP FTP site using ad hoc host (3 of 5) 4:46:20 - ID: 98245243 4:46:20 - Time: 2007-10-16 16:46:15 to 2007-10-16 16:46:19 4:46:20 - Error: (none) 4:46:20 - Xfer: 2 files, 170952 bytes 4:46:24 - Task Run Results: 4:46:24 - Name: Download from HP FTP site using ad hoc host (1 of 5) 4:46:24 - ID: 98245241 4:46:24 - Time: 2007-10-16 16:46:14 to 2007-10-16 16:46:22 4:46:24 - Error: (none) 4:46:24 - Xfer: 2 files, 170952 bytes 4:46:24 - Task Run Results: 4:46:24 - Name: Download from HP FTP site using ad hoc host (2 of 5) 4:46:24 - ID: 98245242 4:46:24 - Time: 2007-10-16 16:46:15 to 2007-10-16 16:46:21 4:46:24 - Error: (none) 4:46:24 - Xfer: 2 files, 170952 bytes 4:46:24 - Ending demonstration using ad hoc hosts.
A template host is useful if you plan on connecting to servers not already defined as hosts in MOVEit Automation (i.e., "ad hoc hosts"). If you plan on connecting only to servers that are defined as hosts in MOVEit Automation, you do not need a template host.
To create a template host, start by creating an ordinary host of the type you will be using most often; for example, "FTP".
To minimize programming effort, set options on your temporary host to mostly closely match those needed to connect to those servers.
You can reference/download host definitions in MOVEit Automation API using either HostID (available in the host definition dialog through MOVEit Automation Admin) or name. The advantage of using a HostID reference is that the host can be renamed without losing the reference. The advantage of using a name reference is that the host can be "switched" with another host simply by renaming one of the hosts through MOVEit Automation Admin.
To create template tasks, set up simple tasks (source and destination only) that reference your template host.
Do NOT include a schedule with these tasks: at best, schedules will be ignored; at worst, schedules will leave a confusing error regarding your template tasks in your logs.
You can override any of your source values later, but you may find it handy to use obviously incomplete values such as "SourceMaskTBA" in your template definitions to make it clear what you need to later.
You may also want to make a "how to handle the source files after download" choice here too. Generally people opt to only download new files, delete originals or rename originals. If you are downloading specific files or are still testing your operation, you may not need one of these selections. If you want to use the "new files only" option, you must take care to use the same TaskID on subsequent temporary task submissions. The delete/rename options are safe to use in any situation.
You can also override any of your destination values later. However, you should UNCHECK the "Use Original Filename" box (even if you leave the "[OrigName]" macro untouched) to make it perfectly clear that you reserve the right to override the destination filename value too.
To work with permissions, sign on to MOVEit Automation Admin as a MOVEit Automation administrator and open the "Settings | Permissions" dialog.
If you want to give your MOVEit Automation API application FULL access to MOVEit Automation, simply add a new user to the "MOVEit Admin" Windows group and use that user's credentials in your MOVEit Automation API application.
Otherwise, continue with these instructions...
First, add a new Windows group called something like "MOVEit Users-API1".
Open your new task group and use the "Add" button in the top section to add a new user called something like "API1". Then use the "Create" button in the bottom section to create a new task group called something like "API1 Task Group". This will open a new dialog from which you can add other elements to the task group.
First go to the "Tasks" tab and add in all your template tasks.
Then go to the "Hosts" tab and...
Also add any other elements (such as scripts or certs) that your MOVEit Automation API application will need to access. (You can also change this later if your are unsure.)
When you click the "OK" button at the bottom of this dialog, you will be asked about permissions. Enable both "Run" and "Add/Edit/Delete" permissions on Tasks.
When complete, your Windows group should look like something like the following picture.
Click "OK" until you have been returned to the regular MOVEit Automation Admin interface to save your settings.