This is a PS code to get the current Windows OS build version. It is based on (“https://smsagent.blog/2017/05/18/find-the-full-windows-build-number-with-powershell/”)
—
Function Get-WindowsVersion{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$false,
ValueFromPipelineByPropertyName=$true,
ValueFromPipeline=$true
)]
[string[]]$ComputerName = $env:COMPUTERNAME
)
Begin
{
$Table = New-Object System.Data.DataTable
$Table.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
}
Process
{
Foreach ($Computer in $ComputerName)
{
$Code = {
$ProductName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' –Name ProductName).ProductName
Try
{
$Version = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' –Name ReleaseID –ErrorAction Stop).ReleaseID
}
Catch
{
$Version = "N/A"
}
$CurrentBuild = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' –Name CurrentBuild).CurrentBuild
$UBR = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' –Name UBR).UBR
$OSVersion = $CurrentBuild + "." + $UBR
# Get-CimInstance Win32_OperatingSystem to list Build number in the machine
$getOS = gcim Win32_OperatingSystem
# Assign the initial value for this variable
$currentOSVersion = "Unknown OS"
# Check Build number is corresponding with Windows 10 and Windows Server OS edition.
# https://docs.microsoft.com/en-us/windows/release-health/release-information
# https://docs.microsoft.com/en-us/windows-server/get-started/windows-server-release-info
Switch -WildCard ($getOS.BuildNumber){
# if BuildNumber is 19043, Windows version is Windows 10 21H1 and so on.
'*19043*'{$currentOSVersion = "21H1"}
'*19042*'{$currentOSVersion = "20H2"}
'*19041*'{$currentOSVersion = "2004"}
'*18363*'{$currentOSVersion = "1909"}
'*18362*'{$currentOSVersion = "1903"}
'*17763*'{$currentOSVersion = "1809"}
# if BuildNumber is 14393, Windows version is Windows Server 2016 version 1067 and so on.
'*14393*'{$currentOSVersion = "1607"}
'*17763.107*'{$currentOSVersion = "1809"}
'*18363.418*'{$currentOSVersion = "1909"}
'*19041.264*'{$currentOSVersion = "2004"}
'*19042.508*'{$currentOSVersion = "20H2"}
'*20348.169*'{$currentOSVersion = "2022"}
}
$TempTable = New-Object System.Data.DataTable
$TempTable.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
[void]$TempTable.Rows.Add($env:COMPUTERNAME,$ProductName,$currentOSVersion,$OSVersion)
Return $TempTable
}
If ($Computer -eq $env:COMPUTERNAME)
{
$Result = Invoke-Command –ScriptBlock $Code
[void]$Table.Rows.Add($Result.Computername,$Result.'Windows Edition',$Result.Version,$Result.'OS Build')
}
Else
{
Try
{
$Result = Invoke-Command –ComputerName $Computer –ScriptBlock $Code –ErrorAction Stop
[void]$Table.Rows.Add($Result.Computername,$Result.'Windows Edition',$Result.Version,$Result.'OS Build')
}
Catch
{
$_
}
}
}
}
End
{
Return $Table
}
}
—
Run the command.
PS C:\shared\ Get-MyWindowsVersion
Query all Windows 10 domain-joined on Active Directory.
(Get-ADComputer -filter {OperatingSystem -Like '*Windows 10*'})
Query all Windows Server 2016 domain-joined on Active Directory.
Get-ADComputer -filter {OperatingSystem -Like '*Windows Server*'}
A script to detect Windows 10 OS’s current patch version if the machine is online.
$filename = (Get-Date).tostring("dd-MM-yyyy-hh-mm")
# Query Windows 10 domain-joined on Active Directory
$computername = (Get-ADComputer -filter {OperatingSystem -Like '*Windows 10*'}).name
foreach($computer in $computername){
$ping_result = Test-Connection -ComputerName $computer -Count 1 -Quiet
if($ping_result){
get-windowsversion -computer $computer
# | Select-Object -Property ComputerName, 'Windows Edition', Version, 'OS build' |
# Sort-Object 'OS build' | export-csv -NoTypeInformation -Append "$filename.csv"
}
else{
Write-Host "Host ICMP: failure"
}
}
Save the output to csv file
# Get date when running the script
$filename = (Get-Date).tostring("dd-MM-yyyy-hh-mm")
# Query Windows 10 domain-joined on Active Directory
$computername = (Get-ADComputer -filter {OperatingSystem -Like '*Windows 10*'}).name
foreach($computer in $computername){
# the machine is offline if the script is not ablt to get any echo reply from sending 3 echo requests
$ping_result = Test-Connection -ComputerName $computer -Count 3 -Quiet
# if the machine is online
if($ping_result){
# get Windows 10 current patch information and append the result yo csv file
get-windowsversion -computer $computer |
Select-Object -Property ComputerName, 'Windows Edition', Version, 'OS build' |
Sort-Object 'OS build' | export-csv -NoTypeInformation -Append "$filename.csv"
}
# else{
# Write-Host "Host ICMP: failure"
# }
}