您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

Python检查已完成和失败的Task 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('Listed %d tasks.' % n)

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

另外,这是一个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('Listed %d tasks.' % n)
python 2022/1/1 18:32:06 有219人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶