Follow by Email

Tuesday, 21 April 2015

Internet Explorer Version Information via Hardware Inventory

 

Although it is certainly possible to use iexplore.exe to obtain this information, I'm not a huge fan of software inventory, when I can use hardware inventory instead.  Below is a mof edit to pull out Internet Explorer version information, and latest IE hotfix applied, from the registry.  Also below is a sample SQL report, and screen shot of what that might look like.

In my environment, this reported on Internet Explorer versions 6 and higher (well, up to version 11; who knows if newer versions, once released, will still be in the same place).  There is one exception to the data available, IE versions 8 and lower do not populate the regkey "svckbnumber", so that information is not available for those versions of IE.  You should be able to 'surmise' some of the information based on the Build Number as to whether or not a system has a later hotfix applied, when addressing IE version 6, 7, and 8.  But because of that slight change from version 8 to 9 and higher, it made the report interesting to do so that it displayed exactly what I wanted.  I suspect most people have already done the RegKeytoMof for internet explorer versions, so this blog post is mostly to share the report syntax; in case you (like me) wanted the report to look as logical as possible to the management-types that might be looking at it.

This is a ConfigMgr Mof edit, based on regkeytomof from Mark Cochrane:

// RegKeyToMOF by Mark Cochrane (thanks to Skissinger, Steverac, Jonas Hettich & Kent Agerlund)
// this section tells the inventory agent what to collect
// Place at the bottom of your configuration.mof file in installedlocation/inboxes/clifiles.src/hinv

#pragma namespace ("\\\\.\\root\\cimv2")
#pragma deleteclass("IExplorerVer", NOFAIL)
[DYNPROPS]
Class IExplorerVer
{
[key] string KeyName;
String Version;
String svcVersion;
String svcKBNumber;
};

[DYNPROPS]
Instance of IExplorerVer
{
KeyName="RegKeyToMOF";
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Internet Explorer|Version"),Dynamic,Provider ("RegPropProv")] Version;
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Internet Explorer|svcVersion"),Dynamic,Provider ("RegPropProv")] svcVersion;
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Internet Explorer|svcKBNumber"),Dynamic,Provider ("RegPropProv")] svcKBNumber;
};

//=============================

// RegKeyToMOF by Mark Cochrane (thanks to Skissinger, Steverac, Jonas Hettich & Kent Agerlund)
// this section tells the inventory agent what to report to the server
// Save this snippet as 'tobeimported.mof', and in CM2012, import it into your Default Client Agent
// Settings, Hardware Inventory, Classes, Import

#pragma namespace ("\\\\.\\root\\cimv2\\SMS")
#pragma deleteclass("IExplorerVer", NOFAIL)
[SMS_Report(TRUE),SMS_Group_Name("IExplorerVer"),SMS_Class_ID("IExplorerVer")]
Class IExplorerVer: SMS_Class_Template
{
[SMS_Report(TRUE),key] string KeyName;
[SMS_Report(TRUE)] String Version;
[SMS_Report(TRUE)] String svcVersion;
[SMS_Report(TRUE)] String svcKBNumber;
};

Below are a couple sample queries to get you started.  The 'fun' stuff is with version 9, the regkey 'Version' started being recorded as 9.9.0, then version 10 was 9.10.0... version 11 was 9.11.0... which is slightly irritating (at least to me).  So that's why this sql is slightly obnoxious.  It's cast 'ing and figuring out whether the report should use version0 or svcversion0 as the version we humans want to see.

//======Internet Explorer, all computers=============
Select
s.netbios_name0,
ie.svcKBNumber0 [Latest Hotfix applied, (available in version 9 and higher)],
--Use this next for linking in an SRS report, but you don't need to have a column for it in the report display
RIGHT(ie.svcKBNumber0,LEN(ie.svckbnumber0)-2) as 'UseforLinking',
case when ie.svcversion0 is null then ie.version0
else ie.svcversion0 end as 'Internet Explorer Version',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,4) AS BIGINT)
else cast(ParseName(ie.svcversion0,4) AS BIGINT) end as 'MajorVersion',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,3) AS BIGINT)
else cast(ParseName(ie.svcversion0,3) AS BIGINT) end as 'MinorVersion',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,2) AS BIGINT)
else cast(ParseName(ie.svcversion0,2) AS BIGINT) end as 'RevisionNumber',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,1) AS BIGINT)
else cast(ParseName(ie.svcversion0,1) AS BIGINT) end as 'BuildNumber'
from
v_r_system s
join v_GS_IExplorerVer0 ie on ie.ResourceID=s.ResourceID
order by 'MajorVersion','MinorVersion','RevisionNumber','BuildNumber'

//========Count Internet Explorer====================
Select
ie.svcKBNumber0 [Latest Hotfix applied, (available in version 9 and higher)],
--Use this next for linking in an SRS report, but you don't need to have a column for it in the report display
RIGHT(ie.svcKBNumber0,LEN(ie.svckbnumber0)-2) as 'UseforLinking',
case when ie.svcversion0 is null then ie.version0
else ie.svcversion0 end as 'Internet Explorer Version',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,4) AS BIGINT)
else cast(ParseName(ie.svcversion0,4) AS BIGINT) end as 'MajorVersion',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,3) AS BIGINT)
else cast(ParseName(ie.svcversion0,3) AS BIGINT) end as 'MinorVersion',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,2) AS BIGINT)
else cast(ParseName(ie.svcversion0,2) AS BIGINT) end as 'RevisionNumber',
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,1) AS BIGINT)
else cast(ParseName(ie.svcversion0,1) AS BIGINT) end as 'BuildNumber',
count(*) as 'Count'
from v_GS_IExplorerVer0 ie
group by
ie.svckbnumber0,
RIGHT(ie.svcKBNumber0,LEN(ie.svckbnumber0)-2),
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,4) AS BIGINT)
else cast(ParseName(ie.svcversion0,4) AS BIGINT) end,
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,3) AS BIGINT)
else cast(ParseName(ie.svcversion0,3) AS BIGINT) end,
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,2) AS BIGINT)
else cast(ParseName(ie.svcversion0,2) AS BIGINT) end,
case when ie.svcversion0 is null then
cast(ParseName(ie.version0,1) AS BIGINT)
else cast(ParseName(ie.svcversion0,1) AS BIGINT) end,
case when ie.svcversion0 is null then ie.version0
else ie.svcversion0 end
order by 'MajorVersion','MinorVersion','RevisionNumber','BuildNumber'

//===========================

If you are really ambitious, you can edit your Report Builder Report, and for the field "svckbnumber", you could make that link to another web page, like ="http://support.microsoft.com/kb/" + Fields!UseForLinking.Value

Below is what a sample report (for count) might look like.  This sample also would link by Build Number to a detailed per-computer report.

IeVersions

No comments:

Post a Comment