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

有谁知道我可以看到的方法或资源,以便能够检查我在任务调度程序中的所有Windows任务的状态?我想看看是否有任务失败或成功.我想用Python做到这一点.我看了一下使用win32com.client模块.我可以看到什么是任务,但无法...

有谁知道我可以看到的方法或资源,以便能够检查我在任务调度程序中的所有Windows任务的状态?我想看看是否有任务失败或成功.我想用Python做到这一点.

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

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

解决方法:

以下使用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('Listed %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, one rror=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 one rror is not None:
            one rror(error)
        return
    for entry in _walk_tasks_internal(top, topdown, one rror, include_hidden):
        yield entry


def _walk_tasks_internal(top, topdown, one rror, flags):
    try:
        folders = list(top.GetFolders(0))
        tasks = list(top.GetTasks(flags))
    except pywintypes.com_error as error:
        if one rror is not None:
            one rror(error)
        return

    if not topdown:
        for d in folders:
            for entry in _walk_tasks_internal(d, topdown, one rror, flags):
                yield entry

    yield top, folders, tasks

    if topdown:
        for d in folders:
            for entry in _walk_tasks_internal(d, topdown, one rror, 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('Listed %d tasks.' % n)

本文标题为:Python检查已完成和失败的任务Windows调度程序

基础教程推荐