1

我需要在 Windows Server 2008 中使用任务计划程序解决的场景:

(#1)任务 A 尝试运行程序 > 任务 A 成功并运行 exe 文件 > 任务 B 查看任务 A 的事件并向收件人发送任务 A 成功运行的电子邮件。

场景 #1 的事件(请注意屏幕截图中的时间组以供参考):

100-Task Started
319-Task Engine received message to start task
110-Task triggered by user
200-Action started
129-Created Task Process
201-Action completed
102-Task completed

(#2)任务 A 尝试运行程序 > 任务 A 无法运行 exe 文件,因为 exe 文件不存在 > 任务 B 查看任务 A 的事件并向收件人发送有关失败的电子邮件。

场景#2的事件(注意屏幕截图中的时间组以供参考):

319-Task engine received message to start task
110-Task triggered by user
100-Task Started
200-Action started
203-Action failed to start
103-Action start failed

在此处输入图像描述

这是任务 A 的事件。从上到下阅读它们。我已经按照上面的正确顺序重写了。

这是适用于场景 #1 的 XPath 查询。我无法弄清楚场景 #2(发送失败电子邮件的任务)是什么 XPath。

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">

*[System[EventID=201]] 
and *[EventData[Data[@Name='ResultCode']='0' 
or Data[@Name='ResultCode']='1']] 
and *[EventData[Data[@Name='TaskName']='\test_email_task']]

</Select>
  </Query>
</QueryList>

==================

2012 年 6 月 8 日更新 @ 1:55

更具体地说,场景 #1 不起作用。场景 #2 确实有效。对于场景 #1,我认为系统无法触发事件,因为 ResultCode 为 2147942402。这意味着 Windows 找不到该文件。

场景#1:

... task2 doesn't send email
... task1 has EventID 103 and ResultCode 2147942402
... task1 has EventID 203 and ResultCode 2147942402
  • 创建 2 个任务。
  • 调用任务#1“task1_execute_program”;在“c:\windows\system32\bogus.exe”中添加一个打开程序的操作(无效程序)
  • 调用任务#2“task2_send_email_based_on_result_of_task1”;添加操作以发送电子邮件...输入详细信息和 SMTP 服务器 ....然后添加基于事件的触发器 ....单击 XML 选项卡并在下面输入 XPath 查询:

场景#2:

... task2 sends email because it found write.exe
... task1 has EventID 102-Task Completed
  • 保持一切不变,但将任务 #1 中的 Action 程序从“c:\windows\system32\bogus.exe”(无效程序)”更改为“c:\windows\system32\write.exe”(有效程序)

======================

<QueryList>
    <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
        <Select Path="Microsoft-Windows-TaskScheduler/Operational">

        *[System[EventID=203] and 
        *[EventData[Data[@Name='TaskName']='\task1_execute_program']]]

        or

        *[System[EventID=102]] 
        and *[EventData[Data[@Name='TaskName']='\task1_execute_program']]

        </Select>
    </Query>
</QueryList>
4

1 回答 1

1

估计不是bug。我使用不同的属性来解决它。任务与 EventID。事件历史记录中的列与 XPath 语法中的名称不匹配。“EventID”确实有效(与“Task”一起),但仅当您没有提到结果代码时。因此,任务管理器中很可能存在错误。但这是一个很好的解决方法。

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">

    *[
        System
        [
            Provider[@Name='Microsoft-Windows-TaskScheduler'] 
            and (Level=0 or Level=1 or Level=2 or Level=3 or Level=4 or Level=5) and (Task = 103 or Task = 203)
        ]       
        or
        System
        [
            Provider[@Name='Microsoft-Windows-TaskScheduler'] 
            and (Level=0 or Level=1 or Level=2 or Level=3 or Level=4 or Level=5) and (Task = 102)
        ]       
    ]

    and 

    *[
        EventData
        [
            Data
            [
                @Name='TaskName'
            ]='\task1_execute_program'
        ]
    ]

    </Select>
  </Query>
</QueryList>
于 2012-06-11T23:39:53.220 回答