【问题标题】:Task scheduler-run on event for a specific task only任务调度程序 - 仅针对特定任务的事件运行
【发布时间】:2023-04-05 03:40:01
【问题描述】:

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

Event ID:111    Description:Task terminated

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

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

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

任何建议/帮助将不胜感激。

【问题讨论】:

    标签: windows powershell taskscheduler


    【解决方案1】:

    我建议使用自定义 XML 事件过滤器来执行此操作,因为它可以让您更灵活地选择要触发的事件类型。

    为此,请执行以下操作:

    • 转到触发器选项卡并单击新建/编辑触发器。
    • 开始任务部分将类型更改为 On An Event。
    • 点击设置部分下的自定义选项。
    • 单击“编辑事件过滤器...”按钮。
    • 转到 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/

    【讨论】:

    • 我添加了一个解释,以匹配多个事件 ID 并进一步阅读该主题。
    【解决方案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
    }
    

    【讨论】:

    • 谢谢@Mathias。所以我必须将现有的 PS 脚本包装在 if 语句下并每天安排它? (对不起,我的 PS 不太好):)
    • @anky_91 或者只是将代码添加到EmailScript.ps1 的顶部,以便在最后一个终止的任务不是您感兴趣的任务时退出:)
    猜你喜欢
    • 2018-04-16
    • 2014-06-06
    • 2016-02-19
    • 2019-02-15
    • 2018-04-28
    • 2016-10-02
    • 2011-10-02
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多