AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 5474
Accepted
Jeff Miles
Jeff Miles
Asked: 2009-05-07 12:27:37 +0800 CST2009-05-07 12:27:37 +0800 CST 2009-05-07 12:27:37 +0800 CST

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

  • 772

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,但它不返回任何数据。

windows-server-2008 windows-event-log
  • 6 6 个回答
  • 10574 Views

6 个回答

  • Voted
  1. JeremyS
    2013-06-21T22:48:27+08:002013-06-21T22:48:27+08:00

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

    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 行:

    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

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

    注意:您可能已经注意到字符串“应用程序”在 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 节点替换为以下内容:

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

    现在,在您的自定义视图中出现一个新事件,您应该会自动收到电子邮件通知!呜呼!

    • 3
  2. sclarson
    2009-05-14T12:48:08+08:002009-05-14T12:48:08+08:00

    我无法访问 Server 2008 或 Vista 机器来亲自尝试并为您获取变量,但这篇文章应该是有用的。

    如果您创建一个基本任务,然后查看该任务的 XML,您应该会看到所有可用的值。

    http://blogs.technet.com/otto/archive/2007/11/09/find-the-event-that-triggered-your-task.aspx

    • 1
  3. Kirk Patten
    2009-11-04T13:13:24+08:002009-11-04T13:13:24+08:00

    使用 Sparks 提供的链接中的文档,将此附加行添加到从任务计划程序导出的 XML 中以获取您的事件文本:

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

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

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

    我发现这个谷歌搜索“事件/系统/EventRecordID”

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

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

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

    • 1
  4. Mr Helpful
    2010-05-07T08:08:38+08:002010-05-07T08:08:38+08:00

    你在关注事件数据吗?

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

    这对我有用:

    <Value name="appPoolId">事件/事件数据/数据[@Name='AppPoolID']</Value>

    • 1
  5. Best Answer
    Jeff Miles
    2012-11-02T08:23:22+08:002012-11-02T08:23:22+08:00

    我从来没有最终让这个工作,而且看起来对于 Server 2012,这个电子邮件功能已被完全删除。不幸的是一个死胡同。

    • 1
  6. Tim Tsyganko
    2013-02-22T08:35:15+08:002013-02-22T08:35:15+08:00

    我想我已经完成了你的想法

    <?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>[email protected]</To>
          <From>[email protected]</From>
          <Body>$(EventData)
    $(Message)</Body>
          <HeaderFields />
          <Attachments />
        </SendEmail>
      </Actions>
    </Task>
    
    • 0

相关问题

  • 有没有办法在 LAN 上的所有事件日志中搜索特定事件?

  • 什么可能导致 IIS7 拒绝绑定到不允许导出私钥的证书?

  • 从 2003 年迁移到 2008 年 Microsoft 群集技术

  • 有什么理由使用 Windows Server 2003 而不是 Server 2008?

  • 是否可以在单个 W2008 服务器上安装 Exchange Server?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve