Recently I was looking at Collection http://eskonr.com/2009/08/sccm-collection-report-for-hardware-inventory-not-reported-for-x-days/ to see how many clients have not reported inventory back to sccm since X days and I see quite number of computers did not reported but they do receive applications,patches etc.
you know what would be the impact if Client did not report back inventory back to sccm particularly if you are using Query based Collection using inventory information.
I picked random computer from the collection and check inventoryagent.log to start with. Below is the snippet what I can see.
Note: You might see a different Error from inventoryagent.log which causes the hardware inventory not to be sent to Site.So have a look at log file and see what kind of class is that giving error to add the information.
Error Code : Failed to add an instance of class SMS_MIFGROUP to historical Store:80041001
Failed to Addreport() for SMS_MIFGroup to historical Store:80041001
failed to process instance of SMS_MIFGROUP:80040900
What does it mean ? Client failed to read entries and add to report from SMS_MIFGROUP .
This issue is not going to fix with WMI repair or SCCM Client removal and installation and more over it is not issue with WMI.
Then what error is that ?
Some information about SMS_MIFGROUP :
The SMS_MIFGroup class is a client Windows Management Instrumentation (WMI) class, in Configuration Manager, that serves as a dynamic instance provider class allowing WMI reporting of Management Information Format (MIF) files that extend the client inventory.
This class is used by the Inventory Client Agent to enumerate the third-party MIF files at a designated collection directory. For each file, the instance provider parses the file against the MIF syntax, validates the contents against Configuration Manager restrictions, and reports each individual MIF group in a generic form that is usable by the Inventory Client Agent and management point.
The generic instance format is specifically designed to translate consistently and easily between MIF syntax for any number of MIF group definitions and values. This translation is especially important on the management point, where the Inventory Client Agent report is translated back into MIF format for processing at the Configuration Manager site server.
The preferred way to extend client inventory is through WMI instances (static or dynamic). However, this provider allows a migration step for SMS 2.0 MIF files already in use.
The SMS_MIFGroup class is specifically used to expose No Identification MIF files (NOIDMIFs) through WMI in client inventory. NOIDMIFs are used to extend client inventory beyond that requested for specific WMI instances in the site policy (see InventoryDataItem). For example, hardware vendors can supply asset information by using NOIDMIFs.
For more information about Inventory Agent Client WMI Classes http://msdn.microsoft.com/en-us/library/cc143240.aspx
Let’s have a look at WMI what MIFGROUP Contains and why does it says it failed to add instance of Class SMS_MIFGROUP.
Connect to WMI using either CIM Studio or Wbemtest. I prefer to go with Wbemtest.
Open WBEMTEST of problem computer:
Click on Query and run the query which is failed from the log file (above the error):
SELECT __CLASS, __PATH, __RELPATH, ArchitectureName, ComponentName, MIFGroupVerbatim, MIFClassVerbatim, MIFKeysVerbatim, AttributeKeyValues, MIFAttributesVerbatim, MIFFile, MIFDirectory, MIFFileSize FROM SMS_MIFGroup
Result you see below :
Open SMS_MIFGROUP=<No Key>
Click on Show MOF
You see from above result, AttributeKeyValues has some strange characters for some reason .
So we have identified where the issue but for why this error ? how to fix it ?
You can either modify the MIF/ MOF file for this particular error or Try deleting the SMS_MIFGROUP Class and force Hardware inventory action.
You see this time no errors from inventoryagent.log ,also you can see the results from resource Explorer from sccm console.
How to Delete SMS_MIGGROUP Class?
Connect to wmi of problem computer with right namespace.(this case it is invagt)
Click on Enum classes and select recursive
You see all classes. Select SMS_MIFGROUP and Delete.
You are done J.
You can also do this using VBScript :
ON ERROR RESUME NEXT
Do While objinputfile.AtEndOfLine <> True
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2″)
If Err.Number <> 0 Then
objoutputfile.WriteLine (strcomputer & ” is not connected”)
strNamespace = “\Root\CCM\invagt”
strclass = “SMS_MIFGROUP”
Set objSWbemServices = GetObject(“winmgmts:\\” & strComputer & strNamespace)
objoutputfile.WriteLine (“MIF Deleted, ” & strcomputer)