python 计划任务

Python check for Completed and failed Task Windows scheduler

有谁知道我可以查看的方式或资源来检查任务计划程序中所有Windows任务的状态? 我想看看是否看到任务失败或成功。 我想在Python中做到这一点。

我已经看过一些使用win32com.client模块的信息。 我可以看到什么任务,但是找不到完成的工作的状态。

1
2
3
4
5
6
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来打印所有已注册任务的基本信息,包括最近的运行时间和结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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()

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
' % task.LastTaskResult)
print('Listed %d tasks.' % n)

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

COM接口

  • ITaskService
  • ITaskFolder
  • IRegisteredTask
  • ITaskDefinition
  • ITaskSettings

另外,这是一个walk_tasks生成器,它基于标准库的os.walk建模。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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=Noneuser=None, domain=None, password=None):
    scheduler = win32com.client.Dispatch('Schedule.Service')
    scheduler.Connect(serverNameuser, domain, password)
    if isinstance(topbytes):
        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

1
2
3
4
5
6
7
8
9
10
11
12
13
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
' % task.LastTaskResult)
    print('Listed %d tasks.' % n)

可以使用schtasks和at从命令行访问任务计划程序

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

网址:https://technet.microsoft.com/zh-cn/library/cc755618%28v=ws.10%29.aspx

使用subprocess.check_output从python运行schtasks /query
使用python运行Windows Shell命令

https://technet.microsoft.com/zh-CN/library/cc722006.aspx

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

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

posted @ 2022-03-26 22:50  CrossPython  阅读(563)  评论(0编辑  收藏  举报