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) 在事件查看器中使用您想要的过滤器创建一个“自定义视图”。
2) 获得视图后,您应该会看到“将任务附加到此自定义视图...”的链接。
我选择使用从这里 ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) 提取到 C:\sendmail 的 sendMail.exe。原因是微软的“发送电子邮件”操作存在 SMTP 身份验证问题,而且显然在 Server 2012 中也不存在。
因此,在我的情况下,我在将任务附加到自定义视图时选择了“启动程序”。但我们将把它编辑为 XML,所以不用担心通过 GUI 填充它。
3) 将新任务导出为 XML,稍后我们将对其进行编辑。
4) 在 C:\sendmail 文件夹下创建一个“mail-event.bat”文件,其中包含以下 3 行:
显然,将 'smtp_server'、'from'、'user'、'pass'、'to'、'subject' 替换为所需的值。
这将在 C:\sendmail 下创建一个“$(EventRecordID).log”文件,其中包含该事件的所有详细信息,将其邮寄,然后将其删除。
您可以通过进入事件查看器、在应用程序日志中打开一个事件、切换到详细信息选项卡、选择“XML 视图”然后查找 EventRecordID 来测试批处理文件是否有效。复制该整数,然后从命令行运行:
C:\sendmail> log-event.bat 53522
当然,将 53522 替换为 EventRecordID 节点中的值。如果您收到电子邮件,请前往您满意的地方。
注意:您可能已经注意到字符串“应用程序”在 wevtutil.exe 的命令行中出现了几次——这是因为我似乎无法通过将其直接指向自定义视图来使其工作,而我的自定义视图恰好是应用程序日志中的事件子集。例如,如果您尝试从系统日志中发送事件,您可能需要对其进行调整以使其适用于您的情况。
5) 编辑您导出的 XML,我们将进行两项更改:
首先,将以下“ValueQueries”节点添加到“EventTrigger”节点下的 XML 中:
注意:在上面,我截取了将根据您创建的自定义视图填写的“订阅”信息。不要将我的“订阅”复制到您的 XML 中!
其次,将 Actions 节点替换为以下内容:
现在,在您的自定义视图中出现一个新事件,您应该会自动收到电子邮件通知!呜呼!
我无法访问 Server 2008 或 Vista 机器来亲自尝试并为您获取变量,但这篇文章应该是有用的。
如果您创建一个基本任务,然后查看该任务的 XML,您应该会看到所有可用的值。
http://blogs.technet.com/otto/archive/2007/11/09/find-the-event-that-triggered-your-task.aspx
使用 Sparks 提供的链接中的文档,将此附加行添加到从任务计划程序导出的 XML 中以获取您的事件文本:
也很有趣(希望不言自明):
我发现这个谷歌搜索“事件/系统/EventRecordID”
然后,您可以在任务中引用 $(eventData) 和 $(eventTimeCreated) 变量。
看起来好像这些值是通过逐步遍历 XML 层次结构来指定的。我希望您能够通过分解原始 XML 转储以创建斜线分隔表达式来指定事件的大多数部分。
看起来 '/@' 是此语法中空格字符的简写。
你在关注事件数据吗?
我的要求是每当 IIS 应用程序池由于空闲超时而关闭时发送一封电子邮件。我希望正在关闭的应用程序池的名称出现在电子邮件中。
这对我有用:
<Value name="appPoolId">事件/事件数据/数据[@Name='AppPoolID']</Value>
我从来没有最终让这个工作,而且看起来对于 Server 2012,这个电子邮件功能已被完全删除。不幸的是一个死胡同。
我想我已经完成了你的想法