2016-04-14 55 views
2

タスクスケジューラで持っているすべてのWindowsタスクのステータスを確認できる方法やリソースを知っている人はいますか?タスクが失敗したか、成功したかどうかを確認したいのですか?私はこれを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インタフェース

また、標準ライブラリのos.walkをモデルにしたwalk_tasksジェネレータもあります。

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を使用してのpythonからhttps://technet.microsoft.com/en-us/library/cc755618%28v=ws.10%29.aspx

実行schtasks /queryがを参照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

私は失敗したか完了したもののstausをチェックするために探しています。実行中のものだけではありません –