Check Installed .NET Versions Using PowerShell

Here is a quick and convenient way to check for installed versions of .NET on your system(s):

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version, Release -ErrorAction 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select PSChildName, Version, Release

PSChildName                      Version        Release
-----------                      -------        -------
v2.0.50727                       2.0.50727.5420
v3.0                             3.0.30729.5420
Windows Communication Foundation 3.0.4506.5420
Windows Presentation Foundation  3.0.6920.5011
v3.5                             3.5.30729.5420
Client                           4.7.03062      461814
Full                             4.7.03062      461814
Client                           4.0.0.0

If you just want the versions only:

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version, Release -ErrorAction 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select PSChildName, Version, Release | Select -ExpandProperty Version

2.0.50727.5420
3.0.30729.5420
3.0.4506.5420
3.0.6920.5011
3.5.30729.5420
4.7.03062
4.7.03062
4.0.0.0

You can also sort the output by versions:

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version, Release -ErrorAction 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select PSChildName, Version, Release | Select -ExpandProperty Version | Sort-Object Version

4.7.03062
3.5.30729.5420
4.0.0.0
4.7.03062
3.0.30729.5420
2.0.50727.5420
3.0.6920.5011
3.0.4506.5420

If you just want the highest version installed:

(Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version, Release -ErrorAction 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select PSChildName, Version, Release | Select -ExpandProperty Version | Sort-Object Version)[0]

4.7.03062

If you need to check .NET version on multiple servers:

$Servers = 
(
	"ServerA",
	"ServerB",
	"ServerC",
	"ServerD"
)

foreach ($Server in $Servers)
{

	#Write-Host $Server
	Invoke-Command -ComputerName $Server -ScriptBlock {
	Write-Output "--$(hostname)--"
	Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version,Release -EA 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select PSChildName, Version, Release | Select -ExpandProperty Version | Sort-Object Version
	Write-Output "`n";

	}

}

You can call the script like this and output the content to a .txt file:

.\checkDotNet.ps1 > Output.txt

Content of Output.txt will look like this:

--ServerA--
4.5.50938
3.5.30729.5420
4.0.0.0
4.5.50938
3.0.30729.5420
2.0.50727.5420
3.0.6920.5011
3.0.4506.5420


--ServerB--
4.5.50938
3.5.30729.5420
4.0.0.0
4.5.50938
3.0.30729.5420
2.0.50727.5420
3.0.6920.5011
3.0.4506.5420


--ServerC--
4.5.51209
3.5.30729.5420
4.0.0.0
4.5.51209
3.0.30729.5420
2.0.50727.5420
3.0.6920.5011
3.0.4506.5420

--ServerD--
4.5.50709
3.5.30729.5420
4.0.0.0
4.5.50709
3.0.30729.5420
2.0.50727.5420
3.0.6920.5011
3.0.4506.5420

 

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Mike P
Mike P
5 years ago

I installed .NET 4.7.2 and the Release Dword is 461814. Why does the registry version say 4.7.03062 ? I guess I suspected it to be 4.7.2

Brandon B.
Brandon B.
4 years ago

Thanks!

Jay Withers
Jay Withers
3 years ago

thanks v much!