How to Check Last Reboot Time on Windows Server: Multiple Methods Explained


2 views

As a system administrator or developer working with Windows Server environments, knowing when a server last rebooted is crucial for troubleshooting, maintenance, and compliance purposes. While many are familiar with the basic net statistics command, there are actually several reliable methods to obtain this information.

The simplest alternative is the systeminfo command which provides comprehensive system information including the last boot time:

systeminfo | find "System Boot Time"

This will output something like:

System Boot Time:          5/15/2024, 2:30:45 PM

For more detailed historical data, you can query the Windows Event Log:

Get-WinEvent -LogName System -MaxEvents 1 -FilterXPath "*[System[EventID=6005]]" | 
Format-Table TimeCreated, Message -AutoSize

This PowerShell command retrieves the most recent Event ID 6005 (which indicates system startup).

Windows Management Instrumentation provides another reliable approach:

(Get-WmiObject -Class Win32_OperatingSystem).LastBootUpTime

Or the more modern CIM version:

(Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTime

Performance counters can also reveal system uptime information:

(Get-Counter '\System\System Up Time').CounterSamples.CookedValue

This returns the uptime in seconds, which you can convert to a more readable format.

The Windows Registry stores boot time information as well:

$bootTime = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').InstallDate
[DateTime]::FromFileTime($bootTime)

Each method has its advantages:

  • systeminfo is simple but requires parsing
  • Event logs provide historical context
  • WMI/CIM is great for remote queries
  • Performance counters offer precise uptime
  • Registry method is lightweight

For regular monitoring, you might want to create a PowerShell function:

function Get-LastBootTime {
    param (
        [string]$ComputerName = $env:COMPUTERNAME
    )
    
    try {
        $os = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $ComputerName -ErrorAction Stop
        return $os.LastBootUpTime
    }
    catch {
        Write-Warning "Failed to retrieve boot time from $ComputerName"
        return $null
    }
}

Tracking server uptime is crucial for maintenance windows, troubleshooting, and compliance audits. While Windows doesn't provide a single dedicated command, we have multiple robust methods to extract this information.

The most straightforward approach using built-in Windows utilities:

systeminfo | find "System Boot Time"

This returns output like:

System Boot Time:          6/15/2023, 2:37:41 PM

For scripting purposes, WMI provides reliable results:

wmic os get lastbootuptime

Output format (UTC time):

20230615223741.500000-480

Extract from the System event log with precise filtering:

wevtutil qe System "/q:*[System[(EventID=6013)]]" /rd:true /c:1 /f:text

Modern environments should use this reliable PowerShell method:

Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object LastBootUpTime

For real-time monitoring solutions:

(Get-Counter '\System\System Up Time').CounterSamples.CookedValue
Method Precision Scriptable Remote Capable
SystemInfo Minute Yes Limited
WMI Millisecond Yes Yes
Event Log Second Yes Yes

For enterprise environments, this PowerShell script checks multiple servers:

$servers = "server1","server2","server3"
$servers | ForEach-Object {
    $os = Get-CimInstance -ComputerName $_ -ClassName Win32_OperatingSystem
    [PSCustomObject]@{
        Server = $_
        LastBoot = $os.LastBootUpTime
        Uptime = (Get-Date) - $os.LastBootUpTime
    }
}
  • For domain controllers, check Event ID 6005 in Directory Service logs
  • Virtual machines may inherit host reboot timestamps - check hypervisor logs
  • Always convert UTC times to local timezone when presenting to users