任务计划程序 - 仅对特定任务运行事件触发器

5

我有一个PowerShell脚本用于触发电子邮件,我将其保存为EmailScript.PS1脚本没有问题,可以正常运行)。我计划在每次记录事件时调度此脚本,例如:

Event ID:111    Description:Task terminated

我已成功地在所需事件触发时安排此脚本运行。

但是,目前它会考虑任务计划程序中正在运行的所有任务(例如,并非我的目标任务xyz),而不仅仅是目标任务。

我希望只在特定任务的事件触发时调度此事件任务(而不是所有任务)。但是,在任务计划程序“创建任务”选项卡中,我找不到这样的筛选器/下拉菜单。

欢迎提供建议和帮助。

2个回答

7

我建议使用自定义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>

编辑: 要匹配特定任务的多个事件ID,您可以执行以下操作:

<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
我已经添加了关于匹配多个事件ID的说明以及更多相关阅读材料。 - Floogen

2
你可以查询事件日志,找到最新的111事件ID实例,然后从中获取任务名称。最初的回答中给出了代码示例。
$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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接