计划任务的XPath查询

我试图创建一个Windows计划任务来通知我每次在特殊文件夹中的其他计划任务失败。 为此,我设置了一个计划任务,使用自定义事件过滤器在触发器上运行“在事件上”。

当计划任务的结果代码不是0时(即任务失败),我想执行一些操作(发送电子邮件)。 为此,我将以下设置为我的自定义XML / 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)]]</Select>
    </Query>
</QueryList>

* [System [(EventID = 201)]]检查事件日志的EventID是否为201(Action已完成)。

* [EventData [(Data [@ Name =“ResultCode”]!= 0)]]检查结果代码是否为0(失败)

现在这是我的设置。 我在Windows任务计划程序下的一个子文件夹中有一个计划任务的子集:

 -> Task Scheduler
     -> Task Scheduler Library
         -> XYZ
             -> Task 1
             -> Task 2
             -> ...

我只希望我的新通知任务通知我此 XYZ 子文件夹下的任务失败。

以下是Windows事件日志中的一个示例XML输出,它将具有任务名称 XYZ TaskNameHere

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <System>
        <Provider Name="Microsoft-Windows-TaskScheduler" Guid="{de7b24ea-73c8-4a09-985d-5bdadcfa9017}" />
        <EventID>201</EventID>
        <Version>0</Version>
        <Level>4</Level>
        <Task>201</Task>
        <Opcode>2</Opcode>
        <Keywords>0x8000000000000000</Keywords>
        <TimeCreated SystemTime="2012-04-02T13:51:41.708Z" />
        <EventRecordID>385206</EventRecordID>
        <Correlation ActivityID="{EC12AB2E-C049-4AF5-9FAB-4540F2B3AD83}" />
        <Execution ProcessID="2580" ThreadID="4960" />
        <Channel>Microsoft-Windows-TaskScheduler/Operational</Channel>
        <Computer>blah@whocares.com</Computer>
        <Security UserID="S-1-5-18" />
    </System>
    <EventData Name="ActionSuccess">
        <Data Name="TaskName">XYZTask Name Here</Data>
        <Data Name="TaskInstanceId">{EC12AB2E-C049-4AF5-9FAB-4540F2B3AD83}</Data>
        <Data Name="ActionName">C:SomeProgram.exe</Data>
        <Data Name="ResultCode">3762504530</Data>
    </EventData>
</Event>

这里是我尝试过的XPath,但它不起作用,并给我一个解析错误。

<Select Path="Microsoft-Windows-TaskScheduler/Operational">*[System[(EventID=201)]] and *[EventData[(Data[@Name="ResultCode"]!=0)]] and *[EventData[(Data[@Name="TaskName" and contains(text(),'XYZ')])]]</Select>

有任何想法吗?


以防万一有人想知道这回答了我的问题:

http://msdn.microsoft.com/en-us/library/cc231312%28v=prot.10%29.aspx

事实证明,Task Scheduler不会实现整个XPath功能,只是它的一个子集。


我认为这可以通过以下代码片段来实现。

    string queryString = "*[System/EventID=201] and *[EventData[(Data[@Name="ResultCode"]=0)]]"; ;
    var query = new EventLogQuery("Microsoft-Windows-TaskScheduler/Operational", PathType.LogName, queryString);
   var reader = new EventLogReader(query);
//read...
   var eventRec = reader.ReadEvent();
链接地址: http://www.djcxy.com/p/38939.html

上一篇: XPath Query for Scheduled Task

下一篇: Powershell Scheduled Tasks conflicts?