I wanted to write a little script to disable some scheduled tasks (for maintenance) then after a predetermined time to re0-enable them. This is a common support problem, and I find I often complete the maintenance and forget to re-enable the tasks which results in alarms going off - but maybe not until the start of the next working day.
Anyhow, Windows gives you (at least) two ways of interacting with scheduled tasks:
Although Powershell is an attractive option for scripting, PowerShellPack is poorly documented and the TaskScheduler module is a bit lacking. You can create, start, stop, register or get a task but there doesn't seem to be a cmdlet for actually enabling or disabling a task.
So, back to using groovy as a wrapper to SCHTASKS. All fine, we can use execute to create a CMD process that calls SCHTASKS /query to get the task status. Here's an example using easy-to-parse CSV format:
C:\>schtasks /query /fo csv /tn "\Apple\AppleSoftwareUpdate" "TaskName","Next Run Time","Status" "\Apple\AppleSoftwareUpdate","31/01/2012 11:15:00","Ready"
We can see that "Status" is in field 3 on the heading line, and its value is "Ready" on the data line. That's great.
To disable the task, we can then:
C:\>schtasks /change /disable /tn "\Apple\AppleSoftwareUpdate" SUCCESS: The parameters of scheduled task "\Apple\AppleSoftwareUpdate" have been changed.
Now let's check the status again:
C:\>schtasks /query /fo csv /tn "\Apple\AppleSoftwareUpdate" "TaskName","Next Run Time","Status" "\Apple\AppleSoftwareUpdate","Disabled",""
Yay! The task is indeed disabled - but look how the status has swapped into field 2 - under "Next Run Time". Presumably because there is no next run time while the task is disabled. A blank 3rd field value has been provided, but it is in the wrong place. Whatever way you list out the data, the error is still there:
C:\>schtasks /query /fo table /tn "\Apple\AppleSoftwareUpdate" Folder: \Apple TaskName Next Run Time Status ======================================== ====================== =============== AppleSoftwareUpdate Disabled C:\>schtasks /query /fo list /tn "\Apple\AppleSoftwareUpdate" Folder: \Apple HostName: PIERO TaskName: \Apple\AppleSoftwareUpdate Next Run Time: Disabled Status: Logon Mode: Interactive/Background
OK, now I know this, I can work around it. But another example of MS inconsistency (which no doubt is now firmly baked in for "backward compatibility" for ever and a day...