Does anybody know how to get the OS Version like this:
With using Get-WmiObject? Couldn't find this Informatin at all..
Does anybody know how to get the OS Version like this:
With using Get-WmiObject? Couldn't find this Informatin at all..
Isn't a simple answer to the original question as follows:
Get-ComputerInfo | select windowsversion
WindowsVersion
--------------
1903
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')
Here is a little script I wrote to find computer information:
$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 "--------------------------------------------------------"
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.
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.
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.
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.
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
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