You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何判断Windows未正常关机?如何检测异常关机触发场景?

嘿,这个问题问得相当实用!不管是排查系统问题还是监控设备状态,判断Windows是否异常关机都是很常见的需求,我给你梳理清楚手动判断和自动检测的方法:

一、手动判断Windows是否异常关机的方法
  • 看开机提示:如果上次是异常关机(比如拔电源、硬按电源键强制关机),Windows开机时几乎都会弹出「Windows未正常关闭」的提示,还会让你选择启动模式(正常启动、安全模式等),这是最直观的信号。
  • 查事件查看器日志:这是最权威的判断方式,步骤很简单:
    1. 按下Win + R,输入eventvwr.msc回车打开事件查看器
    2. 依次展开「Windows日志」→「系统」
    3. 找来源为EventLog、事件ID为6008的条目——这就是专门记录异常关机的日志,描述里会明确写「系统意外关闭」,还会标注具体的时间点。
      顺便提一句:正常关机的话会有事件ID6005(系统启动)和6006(系统成功关机)的成对记录,如果只有6005却找不到对应的6006前置日志,那基本可以确定是异常关机了。
二、自动检测异常关机的方法

如果需要批量排查或者实时监控,这些方法会更高效:

  • 命令行快速查询:打开CMD或者PowerShell,直接用命令筛选异常关机日志:
    CMD版本:
    wevtutil qe System /q:"*[System[Provider[@Name='EventLog'] and EventID=6008]]" /f:text
    
    PowerShell版本:
    Get-WinEvent -FilterHashtable @{LogName='System'; ID=6008}
    
    执行后会直接列出所有异常关机的记录,适合快速排查或者嵌入脚本。
  • 写脚本定期监控:如果需要每天自动检查有没有异常关机,可以写个PowerShell脚本,示例如下:
    # 获取最近24小时内的异常关机日志
    $unexpectedShutdowns = Get-WinEvent -FilterHashtable @{
        LogName='System'
        ID=6008
        StartTime=(Get-Date).AddHours(-24)
    } -ErrorAction SilentlyContinue
    
    if ($unexpectedShutdowns) {
        Write-Host "⚠️ 检测到最近24小时内有异常关机记录:"
        foreach ($shutdown in $unexpectedShutdowns) {
            Write-Host "时间:$($shutdown.TimeCreated) | 描述:$($shutdown.Message)"
        }
    } else {
        Write-Host "✅ 最近24小时内无异常关机记录"
    }
    
    你可以把这个脚本添加到Windows任务计划里,设置成每天自动运行,甚至可以扩展加上邮件提醒功能(需要配置SMTP服务器)。
  • 区分异常关机的具体原因:如果想知道是拔电源、硬按电源键还是系统崩溃导致的,可以结合「Microsoft-Windows-Kernel-Power」来源的日志,比如事件ID41(系统意外重启,通常和电源故障或系统崩溃有关),和6008日志配合看就能更精准定位原因。

内容的提问来源于stack exchange,提问作者Liudi Wijaya

火山引擎 最新活动