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();
        }
posted @ 2025-08-23 12:34  sun8134  阅读(16)  评论(0)    收藏  举报
分享按钮