有关事件变量的 Server 2008 电子邮件

有关事件变量的 Server 2008 电子邮件

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 中这个电子邮件功能已被完全删除。不幸的是,这是一条死路。

相关内容