windows - 任务调度程序 - 仅针对特定任务运行事件

标签 windows powershell taskscheduler

我有一个触发电子邮件的 powershell 脚本,我已将其保存为 EmailScript.PS1(脚本没有问题,它运行得很好)。我计划在事件登录时安排此脚本,例如:

Event ID:111    Description:Task terminated

每当触发所需事件时,我都能成功安排此脚本。

但是,目前它考虑了在任务调度程序中运行的所有任务(例如,不是我名为 xyz 的目标任务)。

我想仅在针对特定任务(不是所有任务)触发事件时安排此基于事件的任务,但在任务调度程序创建任务选项卡中找不到这样的过滤器/下拉列表。

如有任何建议/帮助,我们将不胜感激。

最佳答案

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

关于windows - 任务调度程序 - 仅针对特定任务运行事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56274139/

相关文章:

c++ - Windows 中的启动画面

powershell - Powershell 中带有元组键的字典

c - Win32 : Anonymous inherited pipes don't close on subprocess exit

powershell - 在Powershell中是否有用于传递参数的动态变量?

PowerShell 命令在文件名的特定位置添加字符

windows - 每天运行任务计划程序两次,但不是每小时运行一次

c# - TaskScheduler 存在队列和超时问题

PowerShell 脚本在通过任务计划程序运行时缺乏一致性,我是不是遗漏了什么或者这个 Windows 就是 Windows?

asp.net - 如何在 ASP.NET 中列出 Windows 用户和组?

windows - 从 Windows cmd 检索文件属性