Windows · Windows Server  ·  low  ·  Bugchecks & startup

Windows takes minutes to reach the desktop

The boot trace records exactly which service, driver or Group Policy extension is costing the time — there is no need to guess.

What you see

Long delays at the spinning dots, at "Please wait", or stuck on Applying computer settings. The machine is fine once it is up.

What is actually wrong

A service waiting on a network resource, a mapped drive or GPO timing out, a slow driver initialising, or Fast Startup masking the real shutdown time.

Codes and articles

slow bootEvent 100Event 6013Applying computer settings

The fix

Read the boot performance events
Elevated PowerShell30 minuteslow riskreversible

Any slow boot. Windows has been measuring this all along.

  1. Read the boot duration events. Event 100 gives the total; 101 to 110 name what was slow.

    PowerShell
    Get-WinEvent -LogName 'Microsoft-Windows-Diagnostics-Performance/Operational' -MaxEvents 40 | Where-Object { $_.Id -ge 100 -and $_.Id -le 110 } | Format-List TimeCreated, Id, Message

    Event 101 is a slow application, 102 a slow driver, 103 a slow service, 106 a slow background process. The message names the culprit and the milliseconds it cost.

  2. If it hangs on Applying computer settings, time the Group Policy extensions.

    PowerShell
    Get-WinEvent -LogName 'Microsoft-Windows-GroupPolicy/Operational' -MaxEvents 60 | Where-Object Id -in 5326,8000,8001 | Format-Table TimeCreated, Id, Message -AutoSize
  3. Check for drive mappings or scripts pointing at a server that no longer exists.

    PowerShell
    Get-SmbMapping | Format-Table LocalPath, RemotePath, Status -AutoSizegpresult /h C:\temp\gpo.html
  4. Look at what starts automatically and how long the delayed ones take.

    PowerShell
    Get-Service | Where-Object StartType -eq 'Automatic' | Format-Table Name, DisplayName, Status -AutoSize
  5. Set a non-essential slow service to Automatic (Delayed Start) rather than disabling it.

    PowerShell
    Set-Service -Name 'SomeService' -StartupType AutomaticDelayedStart

    Delayed start moves it out of the critical path without removing the functionality, which is usually the right trade.

Confirm it workedEvent 100's boot duration drops on the next few starts.
PowerShell
Get-WinEvent -LogName 'Microsoft-Windows-Diagnostics-Performance/Operational' -MaxEvents 5 | Where-Object Id -eq 100 | Format-List TimeCreated, Message
If you need to undo itSet-Service -StartupType Automatic returns any service you changed.

Where this stops. This write-up was written and checked by hand. It says what each step changes, how to confirm it worked and how to reverse it, and anything destructive is flagged before you reach it. If it does not match what your machine is doing, search the Support Centre for the exact code or message — and when something needs a person, get in touch.