Windows 10 21H1 reports ReleaseID 2009

Windows[German]Since a few days Microsoft has released the Windows 10 May 2021 Update (version 21H1) as a feature update. However, if you want to determine the Windows 10 version via PowerShell or other tools, you run into certain difficulties. The ReleaseID of Windows 10 21H1 returns the value 2009. I happened to come across the corresponding discussion and post this here on the blog for your information.


Advertising

The topic was kicked off on Twitter by Trevor Jones in this tweet. Jones writes: Hmm, what's this? The ReleaseId for W10 21H1 after enablement package install is 2009... and posted the following screenshot in the tweet (I split the PS output into two lines to make it easier to read. 

Windows 10 21H1 eleaseID is 2009

The DisplayVersion is correctly shown as 21H1, but the ReleaseID 2009 made him stumble. This could become relevant for tools like WSUS, WAC or any (PowerShell) scripts that depend on the ReleaseID to determine the OS variant.

Gabe Frost from Microsoft then provided the answers in follow-up tweets. The whole thing is by-design, he said, and the ReleaseID to select the OS version is deprecated.

Tweets to ReleaseID of Windows 10


Advertising

Frost writes that the ReleaseID is neither documented nor exposed by any API (registry only) and is only there for compatibility. To support Windows 10 version 21H1 (switch to mixed integer+strings), Microsoft developers created a new key and left the old key alone. This is how the Information DisplayVersion was born. So anything that relies on the ReleaseID to determine the OS build will no longer work with Windows 10 version 21H1. However, Frost also states in his tweets that you should also not use the DisplayVersion value for evaluation, as this is also undocumented. The article Frost posted here doesn't help with evaluation via PowerShell, as the article is about an AnalyticsInfo Class for the C# programming language.

Problem: Windows 10 version detection

David Segura, who maintains the OSD tools, picks up on the problem in the above tweet and writes that it is not possible with Get-WindowsImage (DISM) to determine if the Windows 10 vesion is 2004 or 20H2 or 21H1. Gives some grumbling in the tweet thread from administrators who have to change their scripts. Complaining that the community can't create tools and scripts when Microsoft throws the OS identifier over a barrel every year. Is this all a problem from your point of view and how do you as administrators solve it to determine the Windows 10 version?


Advertising

This entry was posted in Windows and tagged . Bookmark the permalink.

4 Responses to Windows 10 21H1 reports ReleaseID 2009

  1. Dan Phan says:

    Well, this is careless of MS to change things up without well documented the changes and provide technical guideline for system admins.
    I wonder how patching tools from MS (such as Windows Update on end PC, or SCCM for patching) determine the correct W10 version for patching.

  2. Mr-DJ says:

    I was just researching why my 20h2 (2009) update had an incorrect install date logged in my system. I installed it in Dec 2020, but it kept the Aug 2020 date that I had installed the PREVIOUS update (version 2004). I now understand the reasoning that 20h2 only updated features, not the system.

    But then I got lost again when I found out that the newer 21h1 (which I haven't installed yet) ALSO uses version 2009 ID. If that reasoning is somehow also because 'it is only a feature update', then why didn't my 20h2 update last Fall keep the previous version 2004 ID from the Spring update – since there were no system updates between them?

  3. F.G. says:

    I checked several different builds of Windows 10 1904x and also the Windows 11 22000.194 and 22458.1000, they all show ReleaseId 2009 in the registry. What does 2009 mean if it is the same for all these different builds and versions ?

    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

  4. Paul Turpie says:

    To get the windows version in my SCCM Task sequence I've modified my Powershell script to this:
    function Test-RegistryValue {

    param (

    [parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]$Path,

    [parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]$Value
    )

    try {

    Get-ItemProperty -Path $Path | Select-Object -ExpandProperty $Value -ErrorAction Stop | Out-Null
    return $true
    }

    catch {

    return $false

    }

    }
    if (Test-RegistryValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Value 'DisplayVersion'){
    (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name DisplayVersion).DisplayVersion
    }
    else {
    (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
    }

Leave a Reply

Your email address will not be published. Required fields are marked *

Note: Please note the rules for commenting on the blog (first comments and linked posts end up in moderation, I release them every few hours, I rigorously delete SEO posts/SPAM).