C# 控制台 查询Win日志统计开关机时间
最近办公室天天跳闸…
我的电脑设置了来电自启
通过查询Win日志的开关机时间,来判断下跳闸和来电时间…
正常来说
Win 开机会触发 6005 事件
关机会触发 6006
如果异常断电,会触发 6008
直接上代码:
static void Main(string[] args) { EventLog log = new EventLog("System"); DateTime since = DateTime.Now.AddDays(-14); // 最近两周 var events = log.Entries .Cast<EventLogEntry>() .Where(e => (e.EventID == 6005 || // 开机 e.EventID == 6006 || // 正常关机 e.EventID == 6008 || // 异常关机 e.EventID == 1074) // 用户触发关机 && e.TimeGenerated >= since ) .OrderBy(e => e.TimeGenerated) // 按时间顺序 .ToList(); Console.WriteLine("===== 最近两周的开关机记录 ====="); // 统计变量 int bootCount = 0, normalShutdown = 0, abnormalShutdown = 0, userShutdown = 0; foreach (var ev in events) { string type; switch (ev.EventID) { case 6005: type = "开机 (系统启动 - EventID 6005)"; bootCount++; break; case 6006: type = "关机 (正常关机 - EventID 6006)"; normalShutdown++; break; case 6008: type = "异常关机 (异常关机 - EventID 6008)"; abnormalShutdown++; break; case 1074: type = "关机 (用户/程序触发 - EventID 1074)"; userShutdown++; break; default: type = "其他事件"; break; } Console.WriteLine($"{ev.TimeGenerated:yyyy-MM-dd HH:mm:ss} {type}"); } Console.WriteLine("================================="); Console.WriteLine("===== 汇总统计(最近两周) ====="); Console.WriteLine($"开机次数:{bootCount}"); Console.WriteLine($"正常关机次数:{normalShutdown}"); Console.WriteLine($"异常关机次数:{abnormalShutdown}"); Console.WriteLine($"用户触发关机次数:{userShutdown}"); // 平均每天开机次数 double avgBootPerDay = bootCount / 14.0; Console.WriteLine($"平均每天开机次数:{avgBootPerDay:F2}"); Console.WriteLine("================================="); Console.WriteLine("按任意键退出..."); Console.ReadKey(); }
作者:sun8134
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。