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

如何查询计算机单日首次开机、末次关机时间及两周使用时长

嘿!咱们一步步来解决你的问题。你可以通过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

火山引擎 最新活动