2016-04-14 52 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

我期待檢查失敗或已完成的東西居留制。不只是什麼運行 –

相關問題