Skip to content
Menu
Quicksand Tech
  • Mastodon
  • GitHub
Quicksand Tech

Windows 10 Lifecycle Quick Reference

Microsoft used to provide a great table with all the different Windows 10 builds and their end of life dates. This was infinitely useful as a quick reference, especially since the lifecycle model has changed several times since 2015 AND certain versions got EOL extensions due to the COVID-19 pandemic.

Now, all that appears to be left of the lifecycle is here: https://docs.microsoft.com/en-us/lifecycle/faq/windows#windows-10

The brilliant chart appears to be more or less wiped from the face of the internet. For my benefit, and maybe yours, I’m going to replicate it here.

Windows 10 Lifecycle Chart

OS VersionOS BuildPro EOL DateEnt EOL Date
15071024005/09/201705/09/2017
15111058610/10/201710/10/2017
16071439304/10/201804/09/2019
17031506310/09/201810/08/2019
17091629904/09/201910/13/2020
18031713411/12/201905/11/2021
18091776311/10/202005/11/2021
19031836212/08/202012/08/2020
19091836305/11/202105/10/2022
2004 (20H1)1904112/14/202112/14/2021
2009 (20H2)1904205/10/202205/09/2023
21H11904312/13/202212/13/2022
21H2190446/13/20236/11/2024
22H21904510/14/202510/14/2025

Quick Powershell Domain Searches

All Expired Hosts (updated 06/23/2023)

$range = (get-date).AddDays(-30)
get-adcomputer -filter {(OperatingSystem -like "Windows 10*") -and 
    (OperatingSystem -notlike "*LTSB*") -and
    (OperatingSystem -notlike "*LTSC*") -and 
    (PasswordLastSet -gt $range) -and 
    ((OperatingSystemVersion -eq '10.0 (10240)') -or 
        (OperatingSystemVersion -eq '10.0 (10586)') -or 
        (OperatingSystemVersion -eq '10.0 (14393)') -or 
        (OperatingSystemVersion -eq '10.0 (15063)') -or 
        (OperatingSystemVersion -eq '10.0 (16299)') -or 
        (OperatingSystemVersion -eq '10.0 (17134)') -or
        (OperatingSystemVersion -eq '10.0 (17763)') -or
        (OperatingSystemVersion -eq '10.0 (18362)') -or 
        (OperatingSystemVersion -eq '10.0 (18363)') -or
        (OperatingSystemVersion -eq '10.0 (19041)') -or
        (OperatingSystemVersion -eq '10.0 (19042)') -or
        (OperatingSystemVersion -eq '10.0 (19043)') -or
        ((OperatingSystemVersion -eq '10.0 (19044)') -and
        (OperatingSystem -like "*Pro*")))} `
    -Properties operatingsystem,operatingsystemversion

This excludes LTSB/LTSC and Server clients (one day, when LTSB deployments finally start expiring the logic will have to change just a little).

I also like setting a PasswordLastSet within 30 days to find recent machines only, though you might want to widen the result size depending on your environment (or if you want to find stale entries in your AD if you’re not automatically tombstoning them).

Note: I use PasswordLastSet and not LastLogonDate, because you might have a client that is still logging in but is not updating its password with AD. These clients may be in a kind of limbo state where they’re functional but not properly writing back to AD and may have inaccurate host OS information in AD. You’ll want to identify a secondary process to find straggling hosts as well as identify hosts with a recent “lastlogondate” but old passwordlastset property.

I like to pipe this out to export-csv for review, but you can do what you want with the results.

Quick Links

  • Windows 10 Lifecycle Quick Reference

Recent Posts

  • memorial to quicksand
  • long time no see
  • Manage-MgUserAuthenticationMethods
  • SANS Holiday Hack 2021
  • Demystifying Legacy Auth and Protocol Protections in Azure AD and O365

Archives

  • November 2024
  • February 2024
  • January 2022
  • July 2021
  • January 2021
  • October 2020
  • January 2020
  • November 2019
  • August 2019
  • January 2019
  • October 2018
  • July 2018
  • June 2018

Categories

  • Personal
  • Uncategorized
©2025 Quicksand Tech | Theme: Wordly by SuperbThemes