.NET Framework EOL Audit

Find  End of Life .NET Framework Versions

.NET Framework is the original implementation of .NET. It supports running websites, services, desktop apps, and more on Windows and is by default installed on modern Windows versions. In theory, this requires no maintenance, but due to changes in security standards, it is encouraged to always have the latest version of .NET Framework. Recently Microsoft mentioned that some specific releases were previously signed using Secure Hash Algorithm (SHA-1) certificates. This algorithm is no longer deemed secure. As a result the following .NET Framework versions will go end of life on April 26, 2022.

  • .NET Framework 4.5.2
  • .NET Framework 4.6
  • .NET Framework 4.6.1

Before running the audit, add the following scanning configuration to custom registry scanning.

    • Rootkey: HKEY_LOCAL_MACHINE
    • Regpath: SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
    • Regvalue: Release
The audit below provides an overview of all your Windows devices along with which .NET Framework version was detected through registry scanning or software scanning. The color coding prioritizes registry scanning results as these are the most accurate.

.NET Framework Version Audit Query

Select Top 1000000 tblAssets.AssetID,
tblAssets.AssetName,
tblAssets.Domain,
tblAssets.Username,
tblAssets.Userdomain,
Coalesce(tsysOS.Image, tsysAssetTypes.AssetTypeIcon10) As icon,
tblAssets.IPAddress,
tsysIPLocations.IPLocation,
tblAssetCustom.Manufacturer,
tblAssetCustom.Model,
tsysOS.OSname As OS,
tblAssets.Version,
tblAssets.SP,
Case
When TsysLastscan.Lasttime < GetDate() - 1 Then
'Last registry scan more than 24 hours ago! Information may not be up-to-date. Try rescanning this machine.'
End As Comment,
Case
When SubQuery1.Valuename Is Not Null And SubQuery1.Valuename <> ''
Then 'Yes'
Else 'No'
End As [RegKey Found],
SubQuery1.[.NET Framework Version] As [.NET Framework Version RegKey],
Case
When SubQuery1.[.NET Framework Version] Like '%4.5%' Then '2016-01-12'
When SubQuery1.[.NET Framework Version] Like '%4.6%' Then '2022-04-26'
End As [EOL Date],
subquery2.softwarename As [.Net Framework Software],
subquery2.[EOL Date Software],
Case
When GetDate() < subquery2.[EOL Date Software] Then Cast(DateDiff(DAY,
GetDate(), subquery2.[EOL Date Software]) As NVARCHAR) + ' days remaining'
End As [Days Remaining],
Case
When tblErrors.ErrorText Is Not Null Or
tblErrors.ErrorText != '' Then
'Scanning Error: ' + tsysasseterrortypes.ErrorMsg
Else ''
End As ScanningErrors,
TsysLastscan.Lasttime As LastRegistryScan,
SubQuery1.Lastchanged,
tblAssets.Firstseen,
tblAssets.Lastseen,
tblAssets.Lasttried,
Case
When ((SubQuery1.[.NET Framework Version] Like '%4.5' Or
SubQuery1.[.NET Framework Version] Like '%4.5.1') And
GetDate() >= DateAdd(month, -1, '2016-01-12')) Or
((SubQuery1.[.NET Framework Version] Like '%4.5.2' Or
SubQuery1.[.NET Framework Version] Like '%4.6.1' Or
SubQuery1.[.NET Framework Version] Like '%4.6') And GetDate() >=
DateAdd(month, -1, '2022-04-26')) Then '#ffd152'
When ((SubQuery1.[.NET Framework Version] Like '%4.5' Or
SubQuery1.[.NET Framework Version] Like '%4.5.1') And
GetDate() < '2016-01-12') Or
((SubQuery1.[.NET Framework Version] Like '%4.5.2' Or
SubQuery1.[.NET Framework Version] Like '%4.6.1' Or
SubQuery1.[.NET Framework Version] Like '%4.6') And GetDate() <
'2022-04-26') Then '#d4f4be'
When GetDate() > subquery2.[EOL Date Software] Then '#d4f4be'
When GetDate() >= DateAdd(month, -1, subquery2.[EOL Date Software]) Then
'#ffd152'
When (SubQuery1.[.NET Framework Version] Not Like '%4.5%' And
SubQuery1.[.NET Framework Version] Not Like '%4.6' And
SubQuery1.[.NET Framework Version] Not Like '%4.6.1') Then '#d4f4be'
Else '#ffadad'
End As backgroundcolor
From tblAssets
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
Inner Join tsysAssetTypes On tsysAssetTypes.AssetType = tblAssets.Assettype
Inner Join tsysIPLocations On tsysIPLocations.LocationID =
tblAssets.LocationID
Inner Join tblState On tblState.State = tblAssetCustom.State
Left Join tsysOS On tsysOS.OScode = tblAssets.OScode
Left Join (Select Distinct Top 1000000 tblErrors.AssetID As ID,
Max(tblErrors.Teller) As ErrorID
From tblErrors
Group By tblErrors.AssetID) As ScanningError On tblAssets.AssetID =
ScanningError.ID
Left Join tblErrors On ScanningError.ErrorID = tblErrors.Teller
Left Join tsysasseterrortypes On tsysasseterrortypes.Errortype =
tblErrors.ErrorType
Inner Join TsysLastscan On tblAssets.AssetID = TsysLastscan.AssetID
Inner Join TsysWaittime On TsysWaittime.CFGCode = TsysLastscan.CFGcode
Left Join (Select tblassets.assetid,
tblSoftwareUni.softwarename,
Case
When tblSoftwareUni.softwareName Like '%.NET Framework 2.0%' Then
'2011-07-12'
When tblSoftwareUni.softwareName Like '%.NET Framework 3.0%' Then
'2011-07-12'
When tblSoftwareUni.softwareName Like '%.NET Framework 3.5%' Then
'2029-01-09'
When tblSoftwareUni.softwareName Like '%.NET Framework 4 %' Then
'2016-01-12'
When tblSoftwareUni.softwareName Like '%.NET Framework 4.5 %' Then
'2016-01-12'
When tblSoftwareUni.softwareName Like '%.NET Framework 4.5.1%'
Then '2016-01-12'
When tblSoftwareUni.softwareName Like '%.NET Framework 4.5.2%'
Then '2022-04-26'
When tblSoftwareUni.softwareName Like '%.NET Framework 4.6 %' Then
'2022-04-26'
When tblSoftwareUni.softwareName Like '%.NET Framework 4.6.1%'
Then '2022-04-26'
End As [EOL Date Software]
From tblassets
Inner Join tblSoftware On tblassets.AssetID = tblSoftware.AssetID
Inner Join tblSoftwareUni On tblSoftwareUni.SoftID = tblSoftware.softID
Where tblSoftwareUni.softwareName Like '%.NET Framework%' And
tblSoftwareUni.softwareName Not Like '%core%') As subquery2 On
subquery2.assetid = tblAssets.assetid
Left Join (Select Top 1000000 tblRegistry.AssetID,
tblRegistry.Regkey,
tblRegistry.Valuename,
tblRegistry.Value,
Case
When Cast(tblRegistry.Value As bigint) >= 528040 Then
'.NET Framework 4.8'
When Cast(tblRegistry.Value As bigint) >= 461808 Then
'.NET Framework 4.7.2'
When Cast(tblRegistry.Value As bigint) >= 461308 Then
'.NET Framework 4.7.1'
When Cast(tblRegistry.Value As bigint) >= 460798 Then
'.NET Framework 4.7'
When Cast(tblRegistry.Value As bigint) >= 394802 Then
'.NET Framework 4.6.2'
When Cast(tblRegistry.Value As bigint) >= 394254 Then
'.NET Framework 4.6.1'
When Cast(tblRegistry.Value As bigint) >= 393295 Then
'.NET Framework 4.6'
When Cast(tblRegistry.Value As bigint) >= 379893 Then
'.NET Framework 4.5.2'
When Cast(tblRegistry.Value As bigint) >= 378675 Then
'.NET Framework 4.5.1'
When Cast(tblRegistry.Value As bigint) >= 378389 Then
'.NET Framework 4.5'
End As [.NET Framework Version],
tblRegistry.Lastchanged
From tblRegistry
Where
tblRegistry.Regkey Like
'%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
And tblRegistry.Valuename = 'Release') SubQuery1 On SubQuery1.AssetID =
tblAssets.AssetID
Where tblAssetCustom.State = 1 And TsysWaittime.CFGname = 'registry'
Order By tblAssets.Domain,
tblAssets.AssetName

Audit and Take Action in 3 Easy Steps

1. Download & Install Lansweeper

3. Run the Audit & Take Action

Download Lansweeper to Run this Audit

Harness the Power of Reporting