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

如何解决PowerShell脚本获取Windows最新开机时间异常问题?

解决Windows服务器PowerShell获取开机时间与实际不符的问题

你遇到的情况是:执行以下PowerShell命令获取服务器开机时间时,返回的LastBootUpTime为两周前的时间(11/12/2024 03:31:04),但实际服务器在5分钟前刚完成重启:

Get-WmiObject win32_operatingsystem -ComputerName myserver | Select-Object @{LABEL='LastBootUpTime';EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}

后续尝试Get-CimInstance相关命令,结果一致:

(Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTime
Get-CimInstance -ClassName win32_operatingsystem | select csname, lastbootuptime

以下是针对性的排查和解决思路:

一、先确认服务器是否真的完成重启

  • 查看核心进程的启动时间,比如资源管理器进程:
    Get-Process explorer | Select-Object StartTime
    
    如果返回的时间是5分钟前,说明系统确实完成了重启,问题出在WMI/CIM的数据同步上。
  • 检查系统登录事件,验证最近的会话创建时间:
    Get-WinEvent -LogName System -FilterXPath "*[System[EventID=7001]]" | Select-Object -First 1 TimeCreated
    

二、修复WMI/CIM数据异常

  • 重启WMI服务,强制刷新缓存:
    Restart-Service winmgmt -Force
    
    重启后重新运行Get-CimInstance Win32_OperatingSystem | Select LastBootUpTime验证结果。
  • 检查并修复WMI存储库:
    1. 先验证存储库完整性:
      winmgmt /verifyrepository
      
    2. 如果返回不一致,执行修复命令:
      winmgmt /salvagerepository
      
    3. 修复完成后重启WMI服务再测试。

三、直接从事件日志获取准确开机时间

如果WMI/CIM数据始终异常,可以绕过它们,直接读取系统事件日志中的开机记录:

  • 读取Event ID 6005(事件日志服务启动,对应系统开机):
    Get-WinEvent -LogName System -FilterXPath "*[System[EventID=6005]]" | Select-Object -First 1 TimeCreated
    
    这个事件是系统启动后必生成的,除非日志被手动清空或篡改。
  • 如果找不到6005事件,读取Event ID 1074(系统关机/重启事件),对应的开机时间会在该事件时间之后:
    Get-WinEvent -LogName System -FilterXPath "*[System[EventID=1074]]" | Select-Object -First 1 TimeCreated
    

四、检查系统时间同步问题

  • 确认服务器当前系统时间是否正确:
    Get-Date
    
  • 如果时间偏差较大,执行时间同步:
    w32tm /resync
    
  • 检查BIOS时间是否与系统时间一致,部分服务器BIOS时间异常会导致WMI数据出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:15:12