【问题标题】:How to export windows task scheduler historical log using python?如何使用 python 导出 windows 任务调度程序历史日志?
【发布时间】:2019-11-11 09:09:00
【问题描述】:

我正在尝试导出计划任务信息以跟踪是否有任何失败的任务及其时间。任务调度程序上有一个用于导出的功能,但是有没有办法使用 python 自动导出?

【问题讨论】:

  • 所有信息都在 Mark Hammond 的 Win32 上的 Python 编程 ISBN 1-56592-621-8 一书中。这是一个太大的话题,无法在 SO 答案中涵盖。

标签: python windows logging scheduled-tasks


【解决方案1】:

看起来这个问题有一个提取您要询问的数据的示例。 https://stackoverflow.com/a/36635050/4734574

更新:

我使用了链接中的第一个示例,并在我的系统上设置了所有任务。如果您没有看到所有任务,则可能是 UAC(用户帐户控制)的权限问题。如果是这种情况,您可能希望以管理员权限运行您的 dos/git-bash。

  1. pip install pywin32
  2. 运行以下 python 脚本:

task_dump.py

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)

注意:我没有对原始海报帖子进行任何修改。

  1. 运行:python task_dump.py > tasks.log

示例结果

Path       : \NvBatteryBoostCheckOnLogon_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 2019-06-30 10:15:36+00:00
Last Result: 0

Path       : \NvDriverUpdateCheckDaily_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 2019-06-29 22:25:26+00:00
Last Result: 0

Path       : \NVIDIA GeForce Experience SelfUpdate_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 1999-11-30 00:00:00+00:00
Last Result: 267011

Path       : \NvNgxUpdateCheckDaily_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 2019-06-29 23:25:31+00:00
Last Result: 1

Path       : \NvNodeLauncher_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 2019-06-30 10:13:35+00:00
Last Result: -2147467259

Path       : \NvProfileUpdaterDaily_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 2019-06-29 22:25:22+00:00
Last Result: 0

Path       : \NvProfileUpdaterOnLogon_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 2019-06-30 10:15:36+00:00
Last Result: 0

Path       : \NvTmMon_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Hidden     : False
State      : Ready
Last Run   : 2019-06-30 10:15:36+00:00
Last Result: 0

【讨论】:

  • 谢谢,它似乎只得到最后一个结果,但我需要提取的是所有历史运行时间,EgTask A 在 6 月 30 日凌晨 1 点运行成功,6 月 30 日凌晨 2 点失败,类似于我可以做成一个数据框。
  • 我使用了第一个示例,它返回了 Windows 10 系统上的所有任务状态。对于第一个示例,您需要安装 pywin32 模块 (pip install pywin32) 才能使脚本正常工作。
  • 啊,刚刚重读了您的评论。我不了解同一任务的运行时间。
  • 为了获得历史记录,您必须启用历史记录。如果您确实启用了它,那么这些实际上是 Windows 事件,因此您实际上是从 EventLog 而不是直接从 TaskScheduler 中查找详细信息。
  • 有没有办法从事件日志中下载详细信息?
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 2018-10-31
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2012-09-19
  • 1970-01-01
相关资源
最近更新 更多