14

Does anybody know how to get the OS Version like this:

OS Version: 1607

With using Get-WmiObject? Couldn't find this Informatin at all..

j.walt
  • 141

9 Answers9

11

Isn't a simple answer to the original question as follows:

Get-ComputerInfo | select windowsversion

WindowsVersion -------------- 1903

Soroosh
  • 119
3

The OS version is stored in a Registry Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ReleaseId. Normally you can read those keys using WMI.

LotPings has provided the correct query in the comments: (Get-Item "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion").GetValue('ReleaseID')

marijnr
  • 424
1

Here is a little script I wrote to find computer information:

Powershell: Get Computer Info

$Computer = "localhost"
$Manufacturer = Get-WmiObject -ComputerName $Computer -class win32_computersystem | select -ExpandProperty Manufacturer
$Model = Get-WmiObject -class win32_computersystem -ComputerName $Computer | select -ExpandProperty model
$Serial = Get-WmiObject -class win32_bios -ComputerName $Computer | select -ExpandProperty SerialNumber
$wmi_os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $Computer | select CSName,Caption,Version,OSArchitecture,LastBootUptime
switch($wmi_os.Version){
'10.0.10240'{$wmi_build="1507"}
'10.0.10586'{$wmi_build="1511"}
'10.0.14393'{$wmi_build="1607"}
'10.0.15063'{$wmi_build="1703"}
'10.0.16299'{$wmi_build="1709"}
'10.0.17134'{$wmi_build="1803"}
'10.0.17686'{$wmi_build="1809"}
}
$wmi_cpu = Get-WmiObject -class Win32_Processor -ComputerName $Computer | select -ExpandProperty DataWidth
$wmi_memory = Get-WmiObject -class cim_physicalmemory -ComputerName $Computer | select Capacity | %{($_.Capacity / 1024kb)}
$DNName = Get-ADComputer -Filter "Name -like '$Computer'" | select -ExpandProperty DistinguishedName
$Boot=[System.DateTime]::ParseExact($($wmi_os.LastBootUpTime).Split(".")[0],'yyyyMMddHHmmss',$null)
[TimeSpan]$uptime = New-TimeSpan $Boot $(get-date)
Write-Host "------Computer Info for $Computer------------------`r"
Write-Host "Hostname from WMI`: $($wmi_os.CSName)"
Write-Host "$DNName"
Write-Host "$Manufacturer $Model SN`:$Serial"
Write-Host "$($wmi_os.Caption) $wmi_build $($wmi_os.OSArchitecture) $($wmi_os.Version)"
Write-Host "CPU Architecture: $wmi_cpu"
Write-Host "Memory: $wmi_memory"
Write-Host "Uptime`: $($uptime.days) Days $($uptime.hours) Hours $($uptime.minutes) Minutes $($uptime.seconds) Seconds"
Write-Host "--------------------------------------------------------"

1

It's not through the WMI, but Jeff Mercado answer might be to any help anyhow;

Since you have access to the .NET library, you could access the OSVersion property of the System.Environment class to get this information. For the version number, there is the Version property.

For example,

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

Major  Minor  Build  Revision
-----  -----  -----  --------
6      1      7601   65536

Details of Windows versions can be found here.

Tim
  • 1,100
1

Get-WmiObject can give you the build version and Number like

(Get-WmiObject Win32_OperatingSystem).Version

Or

(Get-WmiObject Win32_OperatingSystem).BuildNumber

If you want a more general information about just the OS, Id rather suggest you using the Get-Item cmdlet, and search "ProductName" and not "relaseID" key as mentioned above.

(Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").GetValue('ProductName')

The cool thing is that those commands will work with windows 7 up to Windows 10 and Server 2012 up to 2019. It's useful if you need to get information about workstations or apply tasks on workstations in a hybrid environment.

0

Found this cool script at TechNet Gallary: Get-WindowsVersion

Here is how it looks:

[19JUN] :>Get-WindowsVersion -ComputerName ktpc

ComputerName Productname           WindowsVersion WindowsBuild   ProductID               InstallTime
------------ -----------           -------------- ------------   ---------               -----------
KTPC         Windows 10 Enterprise 1803           10.0.17134.112 00329-10280-00000-AA451 5/22/2018 8:10:15 AM

It utilizes the same "RealseID" as others suggested to get this value. However, it is nice effort and ready to use.

Ketanbhut
  • 139
0

It's not using Get-WmiObject, but check this out:

Get-ComputerInfo | Select-Object @{Name='Operating System';Expression={$.OsName}}, @{Name='Version';Expression={$.WindowsVersion}}, @{Name='Build';Expression={$.OsBuildNumber}}, @{Name='Architecture';Expression={$.OsArchitecture}}, @{Name='System Root';Expression={$.WindowsSystemRoot}}, @{Name='Language';Expression={$.OsLanguage}}, @{Name='Boot State';Expression={$_.CsBootupState}} | Format-Table

or

Get-ItemProperty 'HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, ReleaseID, CurrentBuild, SystemRoot

or

Simply take my program and run with it. I'm working on a new version already and hope to have it released soon, as the new version uses a lot more PowerShell and a lot less WMIC commands.

https://sourceforge.net/projects/signature-by-mafii/files/

studiohack
  • 13,477
Mike
  • 9
0

For output similar to what you would see in System Information here's an expansion of the comment from LotPings and called out in answer from marijnr Example Output: Windows 10 Enterprise 22H2 - 19045.3570

$osVersionInfo = Get-Item "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$osProductName = $osVersionInfo.GetValue("ProductName")
$osDisplayVersion = $osVersionInfo.GetValue("DisplayVersion")
$osCurrentBuild = $osVersionInfo.GetValue("CurrentBuild")
$osUbr = $osVersionInfo.GetValue("UBR")

$osVersion = $osProductName + " " + $osDisplayVersion + " - " + $osCurrentBuild + "." + $osUbr

-1

On Windows 11:

(gin).OSDisplayVersion

On Windows 10:

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v DisplayVersion

this will show 22H2, which is last version of Windows 10:

https://learn.microsoft.com/en-us/lifecycle/announcements/windows-10-22h2-end-of-support-update

RoelDS
  • 89