Windows 任务计划程序仅在特定任务的事件上运行
我有一个可以触发电子邮件的powershell脚本,我已将其保存为Windows 任务计划程序仅在特定任务的事件上运行,windows,powershell,taskscheduler,Windows,Powershell,Taskscheduler,我有一个可以触发电子邮件的powershell脚本,我已将其保存为EmailScript.PS1(脚本没有问题,运行正常)。我计划在登录事件时安排此脚本,例如: Event ID:111 Description:Task terminated 无论何时触发所需事件,我都能够成功地安排此脚本 但是,目前它考虑了在任务调度器中运行的所有任务(例如,不是名为xyz的目标任务) 我只想在为特定任务(不是所有任务)触发事件时安排此基于事件的任务,但在任务计划程序的“创建任务”选项卡中找不到此类筛选
EmailScript.PS1
(脚本没有问题,运行正常)。我计划在登录事件时安排此脚本,例如:
Event ID:111 Description:Task terminated
无论何时触发所需事件,我都能够成功地安排此脚本
但是,目前它考虑了在任务调度器中运行的所有任务(例如,不是名为xyz
的目标任务)
我只想在为特定任务(不是所有任务)触发事件时安排此基于事件的任务,但在任务计划程序的“创建任务”选项卡中找不到此类筛选器/下拉列表
如果您有任何建议/帮助,我们将不胜感激。您可以在事件日志中查询
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
}
我建议使用自定义XML事件过滤器来实现这一点,因为它为您选择触发哪种类型的事件提供了更大的灵活性 为此,请执行以下操作:
<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>
- 转到触发器选项卡,然后单击新建/编辑触发器
- 在开始任务部分将类型更改为“在事件上”
- 单击“设置”部分下的“自定义选项”
- 单击编辑事件筛选器。。。按钮
- 转到XML选项卡,然后在菜单底部按下手动编辑查询按钮
- 复制并粘贴下面的XML并确定更改李>
<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>
*[EventData[@Name='TaskSuccessEvent'][Data[@Name='TaskName']='\TASK\u Name\u HERE']]
编辑:要匹配特定任务的多个事件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>
*[EventData[Data[@Name='TaskName']='\TASK\u Name\u HERE']]
和
*[系统[(EventID='102'或EventID='103')]]
如需更多阅读,请参阅以下内容:谢谢@Mathias。所以我必须将现有的PS脚本包装在if语句下,并每天安排它?(很抱歉,我的PS不太好):@anky_91或者那样做,或者只是将代码添加到
EmailScript.ps1
的顶部,以便在最后终止的任务不是您感兴趣的任务时退出:)我添加了一个解释,用于匹配多个事件ID,并进一步阅读该主题。