我有一个触发电子邮件的Powershell脚本,并且我将其保存为EmailScript.PS1
(该脚本没有问题,它运行得很好)。我计划在每次事件登录时安排此脚本,例如:
Event ID:111 Description:Task terminated
无论何时触发所需事件,我都能成功计划此脚本。
但是,当前它考虑了在任务计划程序中运行的所有任务(例如,不是我的名为xyz
的目标任务)。
我只想在为特定任务(不是所有任务)触发事件时计划基于事件的任务,但是在任务计划程序的“创建任务”选项卡中找不到此类过滤器/下拉列表。
任何建议/帮助将不胜感激。
答案 0 :(得分:2)
我建议使用自定义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 :(得分:1)
您可以在事件日志中查询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
}