Posted On May 19, 2020

PowerShell: Get Windows OS Name

kimconnect 0 comments
blog.KimConnect.com >> Codes >> PowerShell: Get Windows OS Name
function getOsBuild($computername=$env:computername){
    $build=""
    $pingable=test-connection $computername -Count 1 -Quiet    

    if($pingable){
        $psinfoIsAvailable=get-command psinfo -ea SilentlyContinue # Requires port 445
        if($psinfoIsAvailable){$build=invoke-expression "psinfo \\$computername|%{if(`$_ -match 'Kernel build number:\s+(\d+)'){`$matches[1]}}" -ea SilentlyContinue}
        else{
            $winRmIsAvailable=Test-WSMan -ComputerName $computername -ea SilentlyContinue # Requires port 5985 5986
            if($winRmIsAvailable){$build=invoke-command -computername $computername -scriptblock{[System.Environment]::OSVersion.Version.Build} -ea SilentlyContinue}                
            }    
    }

    if ($build){
    $osName=switch ($build){
            18363{'Windows 10 (1909)'}
            18362{'Windows 10 (1903)'}
            17763{'Windows 10 (1809)'}
            17134{'Windows 10 (1803)'}
            16299{'Windows 10 (1709)'}
            15063{'Windows 10 (1703)'}
            14393{'Windows 10 (1607)'}
            10586{'Windows 10 (1511)'}
            10240{'Windows 10'}
            9600{'Windows 8.1'}
            9200{'Windows 8'}
            7601{'Windows 7 SP1'}
            7600{'Windows 7'}
            6002{'Windows Vista SP2'}
            6001{'Windows Vista SP1'}
            6000{'Windows Vista'}
            3790{'Windows XP3'}
            2600{'Windows XP2'}
            2195{'Windows XP'}
            default{'Unknown'}
            }
        return $osName
        }
    else{
        return $false
        }
}
# Usage Example:
$targetOs="Windows"
$targetMachines=(Get-ADComputer -Filter "OperatingSystem -like '$targetOs'" -Properties OperatingSystem).DNSHostName
$targetMachines|?{getOsBuild $_}
# Deprecated version
function getOsName($computername=$env:computername){
    try{
        $build=invoke-expression "psinfo \\$computername|%{if(`$_ -match 'Kernel build number:\s+(\d+)'){`$matches[1]}}" -ea Continue
        if (!$build){$build=invoke-command -computername $computername -scriptblock{[System.Environment]::OSVersion.Version.Build}}            
        }
    catch{
        throw $Error
        }
    if ($build){
        $osName=switch ($build){
            18363{'Windows 10 (1909)'}
            18362{'Windows 10 (1903)'}
            17763{'Windows 10 (1809)'}
            17134{'Windows 10 (1803)'}
            16299{'Windows 10 (1709)'}
            15063{'Windows 10 (1703)'}
            14393{'Windows 10 (1607)'}
            10586{'Windows 10 (1511)'}
            10240{'Windows 10'}
            9600{'Windows 8.1'}
            9200{'Windows 8'}
            7601{'Windows 7 SP1'}
            7600{'Windows 7'}
            6002{'Windows Vista SP2'}
            6001{'Windows Vista SP1'}
            6000{'Windows Vista'}
            2600{'Windows XP2'}
            }
        return $osName
        }
    else{
        return $false
        }
}
PS C:\Windows\system32> getOsName
Windows 10 (1809)

Leave a Reply

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

Related Post

PowerShell: Dealing with Service Principle Names (SPNs)

Basic Commands: # Show SPNs$computername="$env:computername"Get-ADComputer -Identity $computername -Properties ServicePrincipalNames |Select-Object -ExpandProperty ServicePrincipalNames# Add one SPNSet-ADComputer…

PowerShell: Reset Windows 10 to Default Factory Settings

The easiest (GUI) method: systemreset -cleanpc The automated method: # Experimental code: not working yet…

PowerShell: Update Local Windows Using COM Objects – Legacy Compatible

Although this function requires 'interactive' or console sessions, it can be trigged by Windows Scheduled…