.NET Framework Version Audit
SoftwareFind .NET Framework Versions 4.5+ of All Computers in Your Network
.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.
The audit below provides an overview of all your Windows devices along with which .NET Framework 4.5 version or higher was detected through registry scanning.
.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 ValuenameFound, SubQuery1.Regkey, SubQuery1.Valuename, SubQuery1.Value, case when cast(SubQuery1.Value as bigint) >= 528040 then '.NET Framework 4.8' when cast(SubQuery1.Value as bigint) >= 461808 then '.NET Framework 4.7.2' when cast(SubQuery1.Value as bigint) >= 461308 then '.NET Framework 4.7.1' when cast(SubQuery1.Value as bigint) >= 460798 then '.NET Framework 4.7' when cast(SubQuery1.Value as bigint) >= 394802 then '.NET Framework 4.6.2' when cast(SubQuery1.Value as bigint) >= 394254 then '.NET Framework 4.6.1' when cast(SubQuery1.Value as bigint) >= 393295 then '.NET Framework 4.6' when cast(SubQuery1.Value as bigint) >= 379893 then '.NET Framework 4.5.2' when cast(SubQuery1.Value as bigint) >= 378675 then '.NET Framework 4.5.1' when cast(SubQuery1.Value as bigint) >= 378389 then '.NET Framework 4.5' end as [.NET Framework Version], 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 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 Top 1000000 tblRegistry.AssetID, tblRegistry.Regkey, tblRegistry.Valuename, tblRegistry.Value, 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