Why does the $PSVersionTable.BuildVersion output differs from that of [System.Environment]::OSVersion.Version?

Issue

Why does the $PSVersionTable.BuildVersion output :

PS C:\> $PSVersionTable.BuildVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      19041  2673


PS C:\>

differs from that of [System.Environment]::OSVersion.Version ? :

PS C:\> [System.Environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      19045  0


PS C:\>

Which one is more reliable ?

Solution

I did a bit of digging, and the BuildVersion entry in $PSVersionTable in Windows PowerShell 5.1 comes from the System.Management.Automation.dll – the assembly containing all of PowerShell’s language and engine features.

In other words: it’s the assembly version, not the Operating System version that’s reflected in $PSVersionTable['BuildVersion'] – and they might not be aligned since the assembly may have been replaced by a security update outside the lifecycle updates to the OS itself and vice-versa.

You can discover the assembly version directly like this:

$SMAVersionInfo = Get-ItemPropertyValue -LiteralPath ([psobject].Assembly.Location) -Name VersionInfo
$SMAProductVersion = [version]$SMAVersionInfo.ProductVersion

$SMAProductVersion should now have the exact same value as $PSVersionTable['BuildVersion']

Answered By – Mathias R. Jessen

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published