############################################################### # # Scriptname: Get-NetFrameworkVersion.ps1 # # Autor: Martin Schvartzman # Date: 02.11.2021 # # Version: unknown / unknown / Martin Schvartzman # Create script # Version: 2022.04.01 / 04.04.22 / Urs Heeb # build numbers for .NET 4.8 added # Version: 2022.12.01 / 11.12.22 / Urs Heeb # build numbers for .NET 4.8.1 added # added missing build numbers and comments from the reference # # # Description: Script does following: # This script reports the various .NET Framework versions # installed on the local or a remote computer # # # Reference: https://msdn.microsoft.com/en-us/library/hh925568 # # # Requirements: # nothing special # ############################################################### # Function Get-DotNetFrameworkVersion # the magic happens here function Get-DotNetFrameworkVersion { param( [string]$ComputerName = $env:COMPUTERNAME ) $dotNetRegistry = 'SOFTWARE\Microsoft\NET Framework Setup\NDP' $dotNet4Registry = 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' $dotNet4Builds = @{ '30319' = @{ Version = [System.Version]'4.0' } '378389' = @{ Version = [System.Version]'4.5' } '378675' = @{ Version = [System.Version]'4.5.1' ; Comment = '(8.1/2012R2)' } '378758' = @{ Version = [System.Version]'4.5.1' ; Comment = '(8/7 SP1/Vista SP2)' } '379893' = @{ Version = [System.Version]'4.5.2' ; Comment = '(all Windows OS)' } '380042' = @{ Version = [System.Version]'4.5' ; Comment = 'and later with KB3168275 rollup' } '393295' = @{ Version = [System.Version]'4.6' ; Comment = '(Windows 10)' } '393297' = @{ Version = [System.Version]'4.6' ; Comment = '(NON Windows 10)' } '394254' = @{ Version = [System.Version]'4.6.1' ; Comment = '(Windows 10)' } '394271' = @{ Version = [System.Version]'4.6.1' ; Comment = '(NON Windows 10)' } '394802' = @{ Version = [System.Version]'4.6.2' ; Comment = '(Windows 10 Anniversary Update)' } '394806' = @{ Version = [System.Version]'4.6.2' ; Comment = '(NON Windows 10)' } '460798' = @{ Version = [System.Version]'4.7' ; Comment = '(Windows 10 Creators Update)' } '460805' = @{ Version = [System.Version]'4.7' ; Comment = '(NON Windows 10)' } '461308' = @{ Version = [System.Version]'4.7.1' ; Comment = '(Windows 10 Fall Creators Update)' } '461310' = @{ Version = [System.Version]'4.7.1' ; Comment = '(NON Windows 10)' } '461808' = @{ Version = [System.Version]'4.7.2' ; Comment = '(Windows 10 / 1803)' } '461814' = @{ Version = [System.Version]'4.7.2' ; Comment = '(other OS than Windows 10 1803)' } '528040' = @{ Version = [System.Version]'4.8' ; Comment = '(Windows 10 / 1905 & 1911)' } '528372' = @{ Version = [System.Version]'4.8' ; Comment = '(Windows 10 / 2005 & 2010 & 2105)' } '528449' = @{ Version = [System.Version]'4.8' ; Comment = '(Windows 11 / Server 2022)' } '528049' = @{ Version = [System.Version]'4.8' ; Comment = '(other OS or Windows 10 builds)' } '533320' = @{ Version = [System.Version]'4.8.1' ; Comment = '(Windows 11 / 2022)' } '533325' = @{ Version = [System.Version]'4.8.1' ; Comment = '(other OS or Windows 10 builds)' } } foreach($computer in $ComputerName) { if($regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer)) { if ($netRegKey = $regKey.OpenSubKey("$dotNetRegistry")) { foreach ($versionKeyName in $netRegKey.GetSubKeyNames()) { if ($versionKeyName -match '^v[123]') { $versionKey = $netRegKey.OpenSubKey($versionKeyName) $version = [System.Version]($versionKey.GetValue('Version', '')) New-Object -TypeName PSObject -Property ([ordered]@{ ComputerName = $computer Build = $version.Build Version = $version Comment = '' }) } } } if ($net4RegKey = $regKey.OpenSubKey("$dotNet4Registry")) { if(-not ($net4Release = $net4RegKey.GetValue('Release'))) { $net4Release = 30319 } New-Object -TypeName PSObject -Property ([ordered]@{ ComputerName = $Computer Build = $net4Release Version = $dotNet4Builds["$net4Release"].Version Comment = $dotNet4Builds["$net4Release"].Comment }) } } } } # Run the function to get the installed .NET framework Get-DotNetFrameworkVersion