网友@精彩人生 提问:”我想把我的日志,主动发送到另外一台计算机,而不是让另外一台计算机主动要获取我电脑上日志,有没有办法做到”。
这里有两个关键字:
主动:我所理解的主动是,类似于实时监听,一有日志,我就发送
发送:要运东西,卡车,火车,还是飞机,选择太多了,自己选择吧:PowerShell远程文件传输,其实还有很多很多,可以自己谷歌。
回到本篇主题:实时监听事件日志,实时监控事件日志,有两种方式:
- 设置一个时间增量,比如每隔5分钟去查询事件日志,把五分钟之内产生的事件日志做处理,比较通用,但是缺点很明显。缺点一:效率低,比如我有1个小时根本没产生日志,但是程序还得自己运行12次。缺点二,就是时间戳判断,稍不留神,可能会遗漏,或者会重复计算,Get-EventLog命令就够了,不是本章重点。
- 实时监听,“一有事件,我就汇报”。使用Windows事件查看器的时候,稍微留心就会发现,每当有新的事件产生时,就会提示:“应用程序 事件数2597 可用的新事件”。其实就是EntryWrittenEventHandler( Occurs when an entry is written to an event log on the local computer.)
打开一个控制台A敲入:
$EventListenerDef=@" namespace PStips.Net { using System; using System.Diagnostics; public class EventListener { public string EventName { private set; get; } public string EventSource { private set; get; } private EventLog log; public EventListener(string eventName, string eventSource) { log = new EventLog(eventName); log.Source = eventSource; log.EnableRaisingEvents = true; log.EntryWritten += log_EntryWritten; } void log_EntryWritten(object sender, EntryWrittenEventArgs e) { Console.WriteLine("New Event Recieved:Id={0},Message={1},Time={2}",e.Entry.InstanceId,e.Entry.Message,e.Entry.TimeGenerated); } } } "@ Add-Type -TypeDefinition $EventListenerDef New-Object PStips.Net.EventListener -ArgumentList 'Application','EventCreate'
再打开另外一个控制台B敲入:
1..5 | foreach { EVENTCREATE /T ERROR /ID 1000 /L APPLICATION /D "PowerShell 中文博客正在测试:,第 $($_) 次测试" }
此时控制台B上回显示:
此时控制台A上会显示:
答疑:上面代码为什么不用PowerShell直接用C#,我用PowerShell没有测试成功,估计是那个委托事件EntryWritten的传递有问题,求原谅。
最后你想邮件通知,还是发送都其它服务器,还是保存成txt,随你的便吧!
本文链接: https://www.pstips.net/monitoring-eventlog.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
赞
最后发送都其它服务器,该怎么写?
https://www.cnblogs.com/xmai/p/6857379.html
这里也有个监听