Планировщик заданий запускается по событию только для конкретной задачи - PullRequest
1 голос
/ 23 мая 2019

У меня есть сценарий powershell, который вызывает электронную почту, и я сохранил его как EmailScript.PS1 ( проблем со сценарием нет, он просто отлично работает ).Я планирую планировать этот сценарий при каждом входе в систему, например:

Event ID:111    Description:Task terminated

Я успешно могу планировать этот сценарий при каждом запуске требуемого события.

Однако в настоящее время учитываются все задачи (например, не моя целевая задача с именем xyz), которые выполняются в планировщике задач.

Я хотел бы запланировать эту задачу на основе событийтолько когда событие инициируется для конкретной задачи (не для всех задач), но не удается найти такой фильтр / раскрывающийся список на вкладке создания задач планировщика задач.

Любые предложения / помощь будут высоко оценены.

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Я бы порекомендовал использовать для этого специальный фильтр событий XML, так как он дает вам большую гибкость в выборе того, какие события запускать.

Для этого выполните следующие действия:

  • Перейдите на вкладку «Триггеры» и нажмите «Создать / изменить триггер».
  • Вкл. Начать задание раздел изменить тип на Вкл. Событие.
  • Выберите пользовательский параметр в разделе «Настройки».
  • Нажмите кнопку Изменить фильтр событий ...
  • Перейдите на вкладку XML и в нижней части меню нажмите кнопку редактирования запроса вручную.
  • Скопируйте и вставьте приведенный ниже XML-файл и подтвердите изменения.

Примечание. Обязательно замените TASK_NAME_HERE названием задачи, которую вы хотите запустить. Кроме того, вы можете заменить TaskSuccessEvent на другое имя события, если хотите инициировать событие другого типа.

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">*[EventData[@Name='TaskSuccessEvent'][Data[@Name='TaskName']='\TASK_NAME_HERE']]</Select>
  </Query>
</QueryList>

Редактировать: чтобы сопоставить несколько идентификаторов событий определенной задачи, вы можете сделать следующее:

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">
        *[EventData[Data[@Name='TaskName']='\TASK_NAME_HERE']]
        and
        *[System[(EventID='102' or EventID='103')]]
        </Select>
  </Query>
</QueryList>

Для дополнительного чтения см. Следующее: https://blogs.technet.microsoft.com/askds/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer/

1 голос
/ 23 мая 2019

Вы можете запросить в журнале событий последний экземпляр идентификатора события 111 и получить оттуда имя задачи:

$event = Get-WinEvent -FilterHashtable @{Id=111;LogName='Microsoft-Windows-TaskScheduler/Operational'} -MaxEvents 1
$taskName = $event.Properties[0].Value

if($taskName -ne '\xyz'){
    # not the right task, abort
    exit
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...