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


13

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]

我曾尝试使用ValueQuery作为EventData,但它不返回任何数据。


+1-我们使用它来从Web服务器发送警报,我想在电子邮件中获取更多信息!我会密切关注这个话题……
基思·威廉姆斯

Answers:


3

我对此进行了一些不同的处理,但是这种方法会针对与自定义​​过滤器匹配的新事件生成电子邮件,所有事件详细信息都包含在电子邮件正文中。

1)使用所需的过滤器在事件查看器中创建一个“自定义视图”。

2)一旦有了视图,您应该会看到“将任务附加到此自定义视图...”的链接。

我选择从此处(http://caspian.dotconf.net/menu/Software/SendEmail/)使用sendMail.exe,并将其提取到C:\ sendmail。原因是Microsoft的“发送电子邮件”操作与SMTP身份验证有关,并且显然在Server 2012中甚至都不存在。

因此,在我的情况下,我将任务附加到“自定义视图”时选择了“启动程序”。但是我们将其编辑为XML,因此不必担心通过GUI进行填写。

3)将新任务导出为XML,我们稍后将对其进行编辑。

4)使用以下3行在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”,“来自”,“用户”,“传递”,“至”,“主题”替换为所需的值。

这将在C:\ sendmail下创建一个带有该事件的所有详细信息的$(EventRecordID).log文件,将其邮寄,然后将其删除。

您可以通过进入事件查看器,在应用程序日志中打开事件,切换到“详细信息”选项卡,选择“ XML视图”,然后查找EventRecordID来测试批处理文件是否正常工作。复制该整数,然后从命令行运行:

C:\ sendmail> log-event.bat 53522

当然,将53522替换为EventRecordID节点中的值。如果您收到电子邮件,请转到您满意的地方。

注意:您可能已经注意到,字符串“ Application”在wevtutil.exe的命令行中显示了几次-这是因为我似乎无法通过直接将其指向“自定义视图”来使其正常工作,自定义视图碰巧是所有在应用程序日志中的事件的子集。例如,如果您尝试从系统日志中发送事件,则可能必须对其进行调整以使其适合您的情况。

5)编辑您导出的XML,我们将进行两项更改:

首先,将以下“ ValueQueries”节点添加到“ EventTrigger”节点下的XML中:

<EventTrigger>
  <Enabled>true</Enabled>
  <Subscription>...snip...</Subscription>
  <ValueQueries>
    <Value name="EventRecordID">Event/System/EventRecordID</Value>
  </ValueQueries>  
</EventTrigger>

注意:在上面,我根据您创建的自定义视图删除了“订阅”信息。不要将我的“订阅”复制到您的XML中!

其次,将“动作”节点替换为以下内容:

<Actions Context="Author">
   <Exec>
     <Command>C:\sendmail\mail_event.bat</Command>
     <Arguments>$(EventRecordID)</Arguments>
   </Exec>
</Actions>

现在,使新事件出现在“自定义视图”中,您应该自动获得电子邮件通知!oo!



1

使用Sparks提供的链接中的文档,将此额外的行添加到从Task Scheduler导出的XML中以获取事件文本:

<Value name="eventData">Event/EventData/Data</Value>

也很有趣(并希望能不言自明):

<Value name="eventTimeCreated">Event/System/TimeCreated/@SystemTime</Value>

我找到了这个Google搜索“ Event / System / EventRecordID”

然后,您可以在任务中引用$(eventData)和$(eventTimeCreated)变量。

看起来这些值似乎是通过逐步遍历XML层次结构来指定的。我希望您能够通过分解原始XML转储以创建斜杠分隔的表达式来指定事件的大多数部分。

在此语法中,看起来'/ @'是空格字符的简写。


刚刚将其添加到我的事件中,我们将在下次发生DFSR冲突时查看它是否有效。感谢您的回答,我会及时通知您。
杰夫·迈尔斯,

1

您是否在收集事件数据?

我的要求是,每当IIS应用程序池由于空闲超时而关闭时,都要发送一封电子邮件。我希望被关闭的应用程序池的名称出现在电子邮件中。

这为我工作:

<Value name =“ appPoolId”>事件/ EventData / Data [@ Name ='AppPoolID'] </ Value>


1

我从来没有最终使它能够正常工作,而且看来对于Server 2012,此电子邮件功能已被完全删除。不幸的是,死胡同。


0

我想我完成了你的想法

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2013-02-07T17:30:20.8644895</Date>
    <Author>QA\TimT</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="ForwardedEvents"&gt;&lt;Select Path="ForwardedEvents"&gt;*&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
      <ValueQueries>
        <Value name="EventChannel">Event/System/Channel</Value>
        <Value name="EventComputer">Event/System/Computer</Value>
        <Value name="EventData">Event/EventData/Data</Value>
        <Value name="EventID">Event/System/EventID</Value>
        <Value name="EventRecordID">Event/System/EventRecordID</Value>
        <Value name="EventSeverity">Event/System/Level</Value>
        <Value name="Message">Event/RenderingInfo/Message</Value>
      </ValueQueries>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>QA\Administrator</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <SendEmail>
      <Server>mail.nowhere.com</Server>
      <Subject>$(EventComputer) reports event $(EventID) in $(EventChannel), record $(EventRecordID), severety $(EventSeverity)</Subject>
      <To>admin@nowhere.com</To>
      <From>reporter@nowhere.com</From>
      <Body>$(EventData)
$(Message)</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>

请,不要只是丢弃一些代码转储(关于一个三年的老问题),而是要说明您做了什么。
Sven
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.