Server 2008 的新功能之一是能够将任务附加到事件日志中的特定事件。可用的操作之一是通过 SMTP 服务器发送电子邮件。
这效果很好,但如果可以在邮件正文中放置事件内容,那就更理想了。我尝试使用 $eventdescription 和 %eventdescription%,但这些都只是瞎猜。无论谷歌搜索多少次都无济于事。
有人知道这是否可能吗?
更新: 我认为 Sparks 下面的建议是朝着正确方向迈出的一步,但是该方法似乎并不适用于所有值。例如,我可以提取 RecordID、Severity 和 Channel(如图所示),但我不能使用相同的方法来检索 EventID,或者最重要的是描述。
以下是某个事件的原始 XML:
[Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"]
[System]
[Provider Name="DFSR" /]
[EventID Qualifiers="16384"]4412[/EventID]
[Level]4[/Level]
[Task]0[/Task]
[Keywords]0x80000000000000[/Keywords]
[TimeCreated SystemTime="2009-05-14T18:18:09.000Z" /]
[EventRecordID]45692[/EventRecordID]
[Channel]DFS Replication[/Channel]
[Computer]servername.domain.com[/Computer]
[Security /]
[/System]
[EventData]
[Data]9046C3F4-843E-4A53-B941-4B20764072E5[/Data]
[Data]D:\departments\Geomatics\Plan Quality\Data Processing\CG3533017 2009-05-13 KT FIXED[/Data]
[Data]D:\departments[/Data]
[Data]{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data]
[Data]Departments[/Data]
[Data]domain.ca\files\departments[/Data]
[Data]B8242CE2-F5EB-47DA-BA5B-1DD2F7EE3AB9[/Data]
[Data]DFAA7A54-66CB-4C31-81A0-0F861382C32C[/Data]
[Data]CG3533017 2009-05-13-{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data]
[/EventData]
[/Event]
我曾尝试对 EventData 使用 ValueQuery,但它没有返回任何数据。
答案1
我对此采取了略有不同的做法,但这种方法会在与自定义过滤器匹配的新事件上生成电子邮件,并且在电子邮件正文中包含所有事件详细信息。
1)使用您想要的过滤器在事件查看器中创建“自定义视图”。
2)一旦您有了视图,您应该会看到一个链接‘将任务附加到此自定义视图...’。
我选择从这里使用 sendMail.exe (http://caspian.dotconf.net/menu/Software/SendEmail/),我将其解压到 C:\sendmail。原因是 Microsoft 的“发送电子邮件”操作存在 SMTP 身份验证问题,而且显然在 Server 2012 中不存在。
因此,在我的情况下,我在将任务附加到自定义视图时选择了“启动程序”。但我们将以 XML 格式编辑它,因此不必担心通过 GUI 填写它。
3)将新任务导出为 XML,我们稍后会对其进行编辑。
4)在 C:\sendmail 文件夹下创建“mail-event.bat”文件,其中包含以下三行:
C:\Windows\system32\wevtutil.exe qe Application /f:text /q:"<QueryList><Query Id='0' Path='Application'><Select Path='Application'>*[System[(EventRecordID=%1)]]</Select></Query></QueryList>" > C:\sendmail\%1.log
C:\sendmail\sendEmail.exe -s <smtp_server> -f <from> -xu <user> -xp <pass> -t <to> -u "<subject>" -o message-file=c:\sendmail\%1.log
del C:\sendmail\%1.log
显然,用所需的值替换“smtp_server”、“from”、“user”、“pass”、“to”、“subject”。
这将在 C:\sendmail 下创建一个“$(EventRecordID).log”文件,其中包含该事件的所有详细信息,然后发送邮件,然后将其删除。
您可以通过进入事件查看器、打开应用程序日志中的事件、切换到“详细信息”选项卡、选择“XML 视图”,然后查找 EventRecordID 来测试批处理文件是否有效。复制该整数,然后从命令行运行:
C:\sendmail> log-event.bat 53522
当然,用 EventRecordID 节点的值替换 53522。如果您收到了电子邮件,那就去您开心的地方吧。
注意:您可能已经注意到字符串“应用程序”在 wevtutil.exe 的命令行中出现了几次——那是因为我似乎无法通过将其直接指向自定义视图来使其工作,而我的自定义视图恰好是应用程序日志内的事件的子集。例如,如果您尝试从系统日志中发送事件,您可能需要对其进行调整以使其在您的案例中工作。
5)编辑您导出的 XML,我们将进行两处更改:
首先,在“EventTrigger”节点下的 XML 中添加以下“ValueQueries”节点:
<EventTrigger>
<Enabled>true</Enabled>
<Subscription>...snip...</Subscription>
<ValueQueries>
<Value name="EventRecordID">Event/System/EventRecordID</Value>
</ValueQueries>
</EventTrigger>
注意:在上面,我截取了“订阅”信息,该信息将根据您创建的自定义视图填写。不要将我的“订阅”复制到您的 XML 中!
其次,将 Actions 节点替换为以下内容:
<Actions Context="Author">
<Exec>
<Command>C:\sendmail\mail_event.bat</Command>
<Arguments>$(EventRecordID)</Arguments>
</Exec>
</Actions>
现在,让新事件出现在您的自定义视图中,您应该会自动收到电子邮件通知!哇哦!
答案2
我没有权限访问 Server 2008 或 Vista 计算机来尝试这我自己并为你获取变量,但这篇文章应该是有用的。
如果您创建一个基本任务,然后查看该任务的 XML,您应该会看到所有可用的值。
http://blogs.technet.com/otto/archive/2007/11/09/find-the-event-that-triggered-your-task.aspx
答案3
使用 Sparks 提供的链接中的文档,将以下附加行添加到从任务计划程序导出的 XML 中以获取事件文本:
<Value name="eventData">Event/EventData/Data</Value>
同样有趣的是(并且希望是不言自明的):
<Value name="eventTimeCreated">Event/System/TimeCreated/@SystemTime</Value>
我在谷歌搜索“Event/System/EventRecordID”时发现了这一点
然后您可以在任务中引用$(eventData) 和 $(eventTimeCreated) 变量。
看起来好像这些值是通过逐步遍历 XML 层次结构来指定的。我希望您能够通过分解原始 XML 转储来创建斜线分隔的表达式来指定事件的大多数部分。
在这个语法中,‘/@’ 好像是空格字符的简写。
答案4
我最终没能让它工作,而且看起来 Server 2012 中这个电子邮件功能已被完全删除。不幸的是,这是一条死路。