如何查询计算机单日首次开机、末次关机时间及两周使用时长
嘿!咱们一步步来解决你的问题。你可以通过Windows事件日志结合PowerShell或命令提示符工具,获取单日首次开机、末次关机时间,以及统计近两周的粗略使用时长。具体方法如下:
获取单日首次开机/末次关机时间及近两周粗略使用时长
一、获取单日首次开机与末次关机时间
Windows系统日志中,开机对应事件ID 6005(事件日志服务启动,标志系统完成开机),关机对应事件ID 6006(事件日志服务停止,标志系统正常关机)。即使期间多次重启,这两个ID也能准确捕捉每次开机/关机的时间点。
方法1:使用PowerShell
1. 查看指定日期的首次开机时间
假设要查询2024年5月20日的首次开机时间,执行以下命令:
Get-WinEvent -FilterHashtable @{LogName='System'; ID=6005; StartTime='2024-05-20 00:00:00'; EndTime='2024-05-20 23:59:59'} | Sort-Object TimeCreated | Select-Object -First 1 TimeCreated
这条命令会筛选出当天所有开机事件,按时间排序后取第一条,就是首次开机时间。
2. 查看指定日期的末次关机时间
同样针对2024年5月20日,执行:
Get-WinEvent -FilterHashtable @{LogName='System'; ID=6006; StartTime='2024-05-20 00:00:00'; EndTime='2024-05-20 23:59:59'} | Sort-Object TimeCreated | Select-Object -Last 1 TimeCreated
筛选当天所有关机事件,按时间排序后取最后一条,即为末次关机时间。
方法2:使用命令提示符(wevtutil)
如果你习惯用CMD,可以用wevtutil工具:
首次开机时间
wevtutil qe System "/q:*[System[(EventID=6005) and TimeCreated[@SystemTime>='2024-05-20T00:00:00.000Z' and @SystemTime<='2024-05-20T23:59:59.999Z']]" /f:text /rd:true /c:1
/rd:true表示按时间倒序,/c:1只取第一条,也就是最早的开机事件。
末次关机时间
wevtutil qe System "/q:*[System[(EventID=6006) and TimeCreated[@SystemTime>='2024-05-20T00:00:00.000Z' and @SystemTime<='2024-05-20T23:59:59.999Z']]" /f:text /rd:true /c:1
/rd:true按时间倒序,取第一条即为当天最晚的关机事件。
二、统计近两周粗略使用时长
要计算近两周的总使用时长,我们可以配对每次开机(6005)和对应的关机(6006)事件,累加每段运行时间。如果系统当前处于开机状态,还需要加上从最后一次开机到现在的时长。
以下是PowerShell脚本,直接运行即可:
# 获取近14天内的开机(6005)和关机(6006)事件,并按时间排序 $events = Get-WinEvent -FilterHashtable @{LogName='System'; ID=@(6005,6006); StartTime=(Get-Date).AddDays(-14)} | Sort-Object TimeCreated $totalUsage = [TimeSpan]::Zero $lastBootTime = $null foreach ($event in $events) { if ($event.Id -eq 6005) { # 记录开机时间 $lastBootTime = $event.TimeCreated } elseif ($event.Id -eq 6006 -and $lastBootTime -ne $null) { # 计算本次开机到关机的时长并累加 $duration = $event.TimeCreated - $lastBootTime $totalUsage += $duration $lastBootTime = $null } } # 如果系统当前正在运行(最后一次开机后未关机),加上当前运行时长 if ($lastBootTime -ne $null) { $currentDuration = (Get-Date) - $lastBootTime $totalUsage += $currentDuration } Write-Host "近两周粗略总使用时长:$totalUsage"
注意事项
- 事件ID 6005/6006仅针对正常开机/关机,如果系统异常崩溃(如断电),可能不会生成6006事件,导致统计略有偏差。
- 该统计未区分系统处于活跃状态还是闲置状态,仅计算开机到关机的总时长(包含闲置时间)。如果需要排除闲置时间,需结合其他事件(如用户登录/注销、屏幕唤醒等)进一步处理。
- 确保你有足够权限访问系统日志(通常普通用户即可,但部分受限环境可能需要管理员权限)。
- 如果系统日志被清理,对应的历史时间数据会丢失,无法统计。
内容的提问来源于stack exchange,提问作者Samselvaprabu




