Python检查完成和失败的任务Windows调度程序

有没有人知道一种方式或资源,我可以看看能够检查我的任务调度程序中的所有Windows任务的状态? 我想看看是否看到任务失败或成功。 我想在Python中这样做。

我看了一下使用win32com.client模块。 我可以看到哪些任务是,但无法find完成工作的状态是什么。

import win32com.client scheduler = win32com.client.Dispatch("Schedule.Service") scheduler.Connect() tasks = scheduler.GetRunningTasks(1) names = [tasks.Item(i+1).Name for i in range(tasks.Count)] print names 

Solutions Collecting From Web of "Python检查完成和失败的任务Windows调度程序"

以下使用Task Scheduler API来打印所有注册任务的基本信息,包括上次运行时间和结果。

 import win32com.client TASK_ENUM_HIDDEN = 1 TASK_STATE = {0: 'Unknown', 1: 'Disabled', 2: 'Queued', 3: 'Ready', 4: 'Running'} scheduler = win32com.client.Dispatch('Schedule.Service') scheduler.Connect() n = 0 folders = [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: %s\n' % task.LastTaskResult) print('listd %d tasks.' % n) 

这仅从列表中的根文件夹开始。 每次通过循环都会弹出一个文件夹; 推动其所有的子文件夹; 并列出文件夹中的任务。 一直持续到文件夹列表为空。

COM接口

  • ITaskService
  • ITaskFolder
  • IRegisteredTask
  • ITaskDefinition
  • ITaskSettings

或者,下面是一个walk_tasks生成器,它是在标准库的os.walk建模的。

 import os import pywintypes import win32com.client TASK_ENUM_HIDDEN = 1 TASK_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, 'fsdecode'): top = os.fsdecode(top) else: top = top.decode('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 entry def _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: %s\n' % task.LastTaskResult) print('listd %d tasks.' % n) 

任务调度程序可以通过命令行使用schtasksat来访问

schtasks : https : //technet.microsoft.com/en-us/library/cc772785%28v=ws.10%29.aspx

: https : //technet.microsoft.com/en-us/library/cc755618%28v=ws.10%29.aspx

使用subprocess.check_output从python运行schtasks /query请参阅使用python运行windows shell命令

https://technet.microsoft.com/en-us/library/cc722006.aspx

tasklist命令会列出所有正在运行的程序和服务,或者在PowerShell中执行get-process

https://superuser.com/questions/914782/how-do-you-list-all-processes-on-the-command-line-in-windows