如何在计划任务电子邮件中获取事件日志信息?

mar*_*rko 4 task-scheduler windows-server-2008-r2

我有一个计划任务,当应用程序发生某些事情时会发送电子邮件。现在我想在电子邮件中也发送事件的消息详细信息。怎么做?

在带有任务计划程序的 Windows Server 2008 R2 中。

pk.*_*pk. 5

实现这一点的唯一方法是一些解决方法(在我看来)。您需要为您的任务创建两个操作。步骤如下:

  1. 事件被触发
  2. 第一个操作对您感兴趣的事件详细信息运行查询并将它们保存到文件中。
  3. 第二个操作将步骤 2 中保存的事件详细信息附加到电子邮件并将其发送出去。

详细过程如下:http : //blogs.technet.com/b/jhoward/archive/2010/06/16/getting-event-log-contents-by-email-on-an-event-log-trigger。 aspx


小智 5

这不是实现它的唯一方法。实际上至少有一种更好的方法可以在 Windows Server 2008 中工作:

https://web.archive.org/web/20121106034308/http://www.buit.org/2009/07/16/event-based-triggered-tasks/

总而言之,您需要将任务定义导出到 xml,在文本编辑器中为您想要的数据添加一些 xpath 查询,更新您的命令行,然后将更新后的任务定义导入回任务计划程序。

导出后打开 xml 文件并找到 <EventTrigger> 节点。

创建子节点 <ValueQueries>

<ValueQueries>
    <Value name="EventID">Event/System/EventRecordID</Value>
    <Value name="Channel">Event/System/Channel</Value>
</ValueQueries>
Run Code Online (Sandbox Code Playgroud)

然后,您可以在命令行中使用 $(EventID) 和 $(Channel) 引用此值查询数据。从我的测试电子邮件事件中,没有正确替换这些值。相反,您需要执行命令行。当然,您可以向事件中的任何数据添加 xpath 查询,这些只是示例。

在将这些数据查询中的某些数据传递到命令行时,您可能还会遇到一些挑战(各种字符,包括引号、斜杠等……可能与您的命令解释器中的特殊字符冲突)。为了缓解这种情况,我使用上面定义的两个参数,然后使用 wevtutil 检索剩余的事件数据:

wevtutil qe "$(Channel)" /q:"*[System[(EventREcordID=$(EventID)]]" /f:xml
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用生成警报的事件记录的完整 xml 文本执行您想要的操作(例如发送电子邮件、解析 xml 等...)

例如,您可以在任务中定义以下操作以将事件 xml 写入磁盘:

<Exec>
    <Command>powershell.exe</Command>
    <Arguments>start-transcript -path C:\alertlog.log -append; add-content -path C:\output.txt -value (wevtutil qe "$(Channel)" /q:"*[System[(EventRecordID=$(EventID))]]" /f:xml); stop-transcript;</Arguments>
</Exec>
Run Code Online (Sandbox Code Playgroud)

引用的博客文章更详细。