以下内容使用Task Scheduler API来打印所有已注册任务的基本信息,包括最后的运行时间和结果。
import win32com.clientTASK_ENUM_HIDDEN = 1TASK_STATE = {0: 'Unknown', 1: 'Disabled', 2: 'Queued', 3: 'Ready', 4: 'Running'}scheduler = win32com.client.Dispatch('Schedule.Service')scheduler.Connect()n = 0folders = [scheduler.GetFolder('\')]while folders: folder = folders.pop(0) folders += list(folder.GetFolders(0)) tasks = list(folder.GetTasks(TASK_ENUM_HIDDEN)) n += len(tasks) for task in tasks: settings = task.Definition.Settings print('Path : %s' % task.Path) print('Hidden : %s' % settings.Hidden) print('State : %s' % TASK_STATE[task.State]) print('Last Run : %s' % task.LastRunTime) print('Last Result: %sn' % task.LastTaskResult)print('Listed %d tasks.' % n)这仅从列表中的根文件夹开始。每次循环都会弹出一个文件夹。推送其所有子文件夹;并列出文件夹中的任务。它一直持续到文件夹列表为空。
COM接口
ITaskService
ITaskFolder
IRegisteredTask
ITaskDefinition
ITaskSettings
另外,这是一个
walk_tasks在标准库上建模的生成器
os.walk。
import osimport pywintypesimport win32com.clientTASK_ENUM_HIDDEN = 1TASK_STATE = { 0: 'Unknown', 1: 'Disabled', 2: 'Queued', 3: 'Ready', 4: 'Running'}def walk_tasks(top, topdown=True, onerror=None, include_hidden=True, serverName=None, user=None, domain=None, password=None): scheduler = win32com.client.Dispatch('Schedule.Service') scheduler.Connect(serverName, user, domain, password) if isinstance(top, bytes): if hasattr(os, 'fsdepre'): top = os.fsdepre(top) else: top = top.depre('mbcs') if u'/' in top: top = top.replace(u'/', u'\') include_hidden = TASK_ENUM_HIDDEN if include_hidden else 0 try: top = scheduler.GetFolder(top) except pywintypes.com_error: if onerror is not None: onerror(error) return for entry in _walk_tasks_internal(top, topdown, onerror, include_hidden): yield entrydef _walk_tasks_internal(top, topdown, onerror, flags): try: folders = list(top.GetFolders(0)) tasks = list(top.GetTasks(flags)) except pywintypes.com_error as error: if onerror is not None: onerror(error) return if not topdown: for d in folders: for entry in _walk_tasks_internal(d, topdown, onerror, flags): yield entry yield top, folders, tasks if topdown: for d in folders: for entry in _walk_tasks_internal(d, topdown, onerror, flags): yield entry例
if __name__ == '__main__': n = 0 for folder, subfolders, tasks in walk_tasks('/'): n += len(tasks) for task in tasks: settings = task.Definition.Settings print('Path : %s' % task.Path) print('Hidden : %s' % settings.Hidden) print('State : %s' % TASK_STATE[task.State]) print('Last Run : %s' % task.LastRunTime) print('Last Result: %sn' % task.LastTaskResult) print('Listed %d tasks.' % n)


