2016-04-14 50 views
2

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

我看了一下使用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 

回答

2

下使用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接口

或者,这是一个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) 
+0

真棒谢谢!!!!!!! –

1

任务调度器可以从命令行中使用schtasksat

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

:使用subprocess.check_output看到蟒蛇https://technet.microsoft.com/en-us/library/cc755618%28v=ws.10%29.aspx

运行 Running windows shell commands with python

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

+0

我期待检查失败或已完成的东西居留制。不只是什么运行 –

相关问题