XPath-запрос для запланированной задачи - PullRequest
3 голосов
/ 02 апреля 2012

Я пытаюсь создать запланированную задачу 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 (Действиезавершено).

* [EventData [(Data [@ Name = "ResultCode"]! = 0)]] проверяет, был ли код результата НЕ 0 (Сбой)

СейчасВот моя установка.У меня есть подмножество запланированных задач в подпапке в Планировщике задач Windows:

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

Я только хочу, чтобы моя новая задача уведомлений уведомляла меня о сбоях задач в этой подпапке \ XYZ \.

Вот пример выходных данных XML из журналов событий Windows, которые будут иметь имя задачи \ 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">\XYZ\Task 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>

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 02 июня 2012

На всякий случай, если кому-то интересно, это ответило на мой вопрос:

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

Оказывается, что планировщик заданий не реализует всю функциональность XPath, только ее подмножество.

0 голосов
/ 09 декабря 2014

Я думаю, что этого можно добиться с помощью следующего фрагмента.

    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();
...