You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过批处理读取系统事件查看器的Kernel-Power事件及唤醒信息?

用CMD/BAT实现系统启动状态与日志查询方案

一、核心实现工具:wevtutil

Windows自带的事件日志查询工具wevtutil可直接在CMD/BAT中调用,能读取系统日志各类事件(包括Kernel-Power相关记录),完全覆盖你无法通过powercfg实现的需求。

二、具体需求实现

1. 判断当前启动类型(睡眠唤醒/冷启动)

通过过滤System日志中最新的启动类事件判断:

  • 冷启动(按钮/网络等触发的开机)对应Kernel-Power事件ID 6005(系统已启动)
  • 睡眠唤醒对应Kernel-Power事件ID 107(系统从睡眠状态唤醒)

示例BAT代码:

@echo off
setlocal enabledelayedexpansion

:: 查询最新的系统启动/唤醒事件
for /f "tokens=*" %%a in ('wevtutil qe System /q:"*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and (EventID=6005 or EventID=107)]]" /c:1 /rd:true /f:text') do (
    set "event=%%a"
    if "!event:Event ID: 107=!" neq "!event!" (
        echo 当前启动类型:睡眠唤醒
    ) else if "!event:Event ID: 6005=!" neq "!event!" (
        echo 当前启动类型:冷启动(按钮/网络等触发)
    )
)
endlocal

2. 获取上次睡眠唤醒的时间/距今时长

查询最新的Kernel-Power事件ID 107的时间戳,借助PowerShell计算距今时长(原生BAT日期处理逻辑较繁琐):

示例BAT代码:

@echo off
setlocal enabledelayedexpansion

:: 获取最新的睡眠唤醒事件时间
for /f "tokens=2,3,4 delims= " %%a in ('wevtutil qe System /q:"*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and EventID=107]]" /c:1 /rd:true /f:text ^| findstr /i "Time Created"') do (
    set "wake_time=%%a %%b %%c"
    echo 上次睡眠唤醒时间:!wake_time!
)

:: 计算距今时长
powershell -Command "$wakeTime = [DateTime]::Parse('%wake_time%'); $now = Get-Date; $span = $now - $wakeTime; Write-Host '距今时长:' $span.Days '天' $span.Hours '小时' $span.Minutes '分钟'"

endlocal

3. 读取系统日志任意消息及触发时间

使用wevtutil指定日志名称、过滤条件即可提取任意事件的时间和消息内容,示例命令:

:: 读取Application日志中最近10条警告级别事件
wevtutil qe Application /q:"*[System[Level=3]]" /c:10 /rd:true /f:text

:: 读取Windows Update的所有系统日志事件
wevtutil qe System /q:"*[System[Provider[@Name='Microsoft-Windows-WindowsUpdateClient']]]" /f:text

4. 查询所有Kernel-Power事件

直接过滤System日志中所有来自Microsoft-Windows-Kernel-Power的事件,示例命令:

:: 导出所有Kernel-Power事件到文本文件
wevtutil qe System /q:"*[System[Provider[@Name='Microsoft-Windows-Kernel-Power']]]" /f:text > Kernel-Power-Logs.txt

:: 查看最新的10条Kernel-Power事件
wevtutil qe System /q:"*[System[Provider[@Name='Microsoft-Windows-Kernel-Power']]]" /c:10 /rd:true /f:text

注意事项

  • 部分wevtutil命令需管理员权限执行,建议右键以管理员身份运行BAT文件
  • 若需纯BAT实现日期计算,需编写复杂的字符串解析逻辑,借助PowerShell是更简洁的方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:35:07