Customizing Hardware Inventory in Configuration Manager 2007 using NOIDMIF Files

First published on TECHNET on Nov 16, 2011

Authored by Clifton Hughes

The IDMIF and NOIDMIF collection can be used to extend Configuration Manager 2007 client inventory information reported by clients. NOIDMIF files extend the hardware inventory information for existing Configuration Manager 2007 clients. IDMIF files are used to add information to the site database for devices and objects that are not Configuration Manager 2007 clients.

DISCLAIMER: As with all posts on our blogs, this post is provided “AS IS” with no warranties or guarantees, and confers no rights. I make no promises that this example will work in your environment as it did in my test lab.

Note: Microsoft product support provides support for the general functionality described herein but does not provide custom or specific solutions.  In other words, if you write your own NOIDMIF we'll help you get it working but we can't write a NOIDMIF for you.


Configuration Manager 2007 creates new tables or modifies existing tables in the site database to accommodate the properties in IDMIF and NOIDMIF files. However, IDMIF and NOIDMIF files are not validated, so they could be used to alter tables that you do not want altered. Valid data could be overwritten by invalid data. Large amounts of data could be loaded, causing delays in all Configuration Manager 2007 functions. To mitigate this risk, you should enable IDMIF and NOIDMIF collection only when needed.

Using NOIDMIF Files to Extend Hardware Inventory

NOIDMIF files are used to add additional data to information stored in the site database for Configuration Manager 2007 clients during hardware inventory.

To extend hardware inventory collected from clients using a NOIDMIF file

1. Using a text editor such as Notepad.exe, create a NOIDMIF file containing the data that will be added to the client hardware inventory information reported during hardware inventory, and save it with a .MIF file name extension.

2. Place the NOIDMIF file in the %Windir%System32CCMinventorynoidmifs directory on a Configuration Manager 2007 client.

3. When the client performs its next scheduled hardware inventory, the information stored in the NOIDMIF file will be added to the client inventory report sent to the site server for processing.


Standard MIF files that are used in Configuration Manager 2007 hardware inventory are called NOIDMIF files. NOIDMIF files do not contain a unique identifier for the data. Configuration Manager automatically associates NOIDMIF file data with the client that the NOIDMIF file is collected from when reporting inventory information.


NOIDMIF files themselves are not sent to the site server during a client hardware inventory cycle. The information that is contained within the NOIDMIF file is collected and added to the client inventory report.

If the classes defined in an inventoried NOIDMIF file do not already exist in the Configuration Manager site database, new inventory class tables are created in the site database to store the inventoried information. Subsequent inventories will inventory the data stored in the NOIDMIF file and update the existing inventory data for the client in the site database. If the NOIDMIF file is removed from the client, all the classes and properties relating to the NOIDMIF file are deleted from the current inventory information for the client in the site database.

For NOIDMIF file information to be inventoried by default, the NOIDMIF file must be stored in the following directory on Configuration Manager clients:


The most common way to use a NOIDMIF file is to create a new class that otherwise cannot be collected by the normal inventory processes or when it does already exist in the computer's BIOS, Registry, or WMI repository. This is generally limited to static data that will not change on the client, for example an asset number.

For example; Before Configuration Manager 2007 was installed on their , Wide World Importers catalogued each computer in the organization by using a company-assigned asset number and serial number. These numbers were assigned and collected by hand. With Configuration Manager 2007, administrators from Wide World Importers can use a NOIDMIF file to add the asset number and serial number for each client computer to its other information within the SMS site database, so that it is available for queries and asset management. Because the asset number and serial number is then associated with collected inventory properties, much more information is available to administrators.

The following sample NOIDMIF file illustrates this process:

Start Component
Name=”System Information”
Start Group
Name=”Wide World Components”
Start Attribute
End Attribute
Start Attribute
End Attribute
End Group
End Component

Note: These values are stored as a string because, in some reporting tools, commas are automatically inserted for integer values, which can cause the format of the asset number to change.

Creating a NOIDMIF file

You can create NOIDMIF files by using any text editor and name the file with the .MIF extension. To create such a NOIDMIF file using a text editor, use the following procedure:

To create a NOIDMIF file to add the WWIComponentInfo class

1. Type the following line to begin the NOIDMIF file:

Start Component

2. You must always add a component and name the component when you create a NOIDMIF file.

3. Type the following line to name the component:

Name = “System Information”

4. By using a general name such as System Information , this component becomes more flexible. You can then use it to add any information you want to maintain for this client by adding new groups to the existing NOIDMIF file.

5. Type the following line to add the Display Name for the new Wide World Components class:

Start Group
Name = “Wide World Components”

6. The Name property under the group is the string that administrators see in Resource Explorer to refer to this group. Wide World Components is a DMTF group class. When SMS first loads this group, it creates a WMI class called SMS_G_wide_world_components.

7. Type the following line to give the Wide World Components group an ID number:

ID = 1

8. Make sure the ID number is unique for groups within this component.

9. Type the following line to add the WWIComponentInfo class:

Class = “WWIComponentInfo”

10. The Class information is used for processing and is generally not seen by administrators.

11. Type the following line to add the key property:

Key = 1

12. This entry indicates that the first property listed is the key. Key properties are unique properties that identify instances of a certain class. Whenever you have more than one instance of a class, you must include at least one key property, or the subsequent instances of the class overwrite the previous instances. If no key properties are defined for a NOIDMIF file on a client running a 32-bit operating system, all the properties are designated as key by the inventory process. This does not occur for IDMIF files or for NOIDMIF files on clients running 16-bit operating systems.

13. Type the following lines to add two string type attributes to the WWIComponentInfo class:

Start Attribute
End Attribute
Start Attribute
End Attribute

14. You must set a Name, ID, and Type and Value for each attribute added. The ID number you choose must be unique within the group. There are two types of attributes that we can enter into a NOIDMIF: integer and string. For the purposes of entering static client data, the string data type should serve most needs. You must also specify a valid value for the data type you selected. The String data type must also include a numeric value for example: Type=String(10), where the value entered in parenthesis will be equal to or greater than the number of characters that is entered into the value for string attribute.

Defining attributes

· The defined class in a NOIDMIF file can contain multiple attributes. There are two types of attributes commonly used; string and integer.

· A string can be any set of characters with a defined string length up of to 255 characters. String values will be entered in quotes, for example; Value=”414207” or Value=”DA1234567891”.

· An integer can be up to 32767 (because this is a short integer). An integer can be any positive or negative integer value. Decimals, fractions, and numbers greater than 32767 should be entered as strings. Integer values should be a numeric value only, without quotes, for example; Value=12500 or Value =123.

Here is an example of an integer attribute, keeping in mind, that this is very limited as noted above and cannot be greater than 32767, any other numeric values you need to enter, that may contain a decimal, or slash, numbers greater than 32767, or numbers that should not be treated as a mathematical number should be entered as a string attribute instead:

Start Attribute
End Attribute

Viewing the Collected Data

You can view the data collected for a particular Configuration Manager Client machine using Resource Explorer. You can also create a query and/or report to view the collected data for multiple clients. It will help when viewing the inventoried data for the new class and attributes if you keep the class and attribute names as short and descriptive as possible.

Reporting on the Collected Data

DISCLAIMER: The following example is provided “AS IS” with no warranties or guarantees, and confers no rights. I make no promises that this example will work in your environment as it did in my test lab.

Once you have created your NOIDMIF on the clients, and have Configuration Manager 2007 configured to gather the NOIDMIF files, and have successfully gathered the entered data from the NOIDMIF files from the clients, and can see this data in Resource Explorer, you may want to create a query and/or report to view the collected data for multiple clients.

Using the sample NOIDMIF above, I created a new query that was Collection Limited to the All Systems Collection, in Configuration Manager 2007 Admin Console, under Site Database, Computer Management, Queries node as follows:

1. In the ConfigMgr 2007 Admin console, right-click Queries , point to New , and click Query on the shortcut menu.

2. Type TEST for the Name.

3. In the Object Type box, enter System Resource if it is not already entered.

4. Click Edit Query Statement , and then click the Add button .

5. Click the Select button on the Result Properties page.

6. Select System Resource in the Attribute class box and select Name in the Attribute box. Then click OK .

7. On the Result Properties page, select Ascending in the Sort box. Click OK .

8. Click the Add button again.

9. Select Wide World Components in the Attribute class box and select AssetNumber in the Attribute box. Then click OK and Repeat steps 8 and 9 to add the ModelNumber , and PositiveInteger Attributes for Wide World Components Attribute class .

10. Click to check the setting Omit duplicate rows (select distinct) check box.

The Query Statement Properties should appear similar to the following screen shot:

11. Click OK . On the Query Properties page, limit the collection to All Systems (or the appropriate collection where your clients are located).

12. Click OK to save the query.

This should result in the following WQL statement:

select distinct SMS_R_System.Name,
SMS_G_System_WWICOMPONENTINFO.PositiveInteger from
SMS_R_System inner join SMS_G_System_WWICOMPONENTINFO on

When you run this query, Configuration Manager 2007 passes the corresponding SQL commands to the SMS Provider, and you can view this in the SMSPROV.LOG on the server running the SMS Provider. This was the resulting SQL statement in my test with a Site name of SMS and the All Systems Collection ID of SMS00001:

select distinct SMS_R_System.Name0,SMS_G_System_WWICOMPONENTINFO.AssetNumber00,SMS_G_System_WWICOMPONENTINFO.ModelNumber00,SMS_G_System_WWICOMPONENTINFO.PositiveInteger00,SMS_G_System_WWICOMPONENTINFO.NegativeInterger00 from System_DISC AS SMS_R_System INNER JOIN Wide_World_Components_data AS SMS_G_System_WWICOMPONENTINFO ON SMS_G_System_WWICOMPONENTINFO.MachineID = SMS_R_System.ItemKey INNER JOIN _RES_COLL_SMS00001 AS SMS_CM_RES_COLL_SMS00001 ON SMS_CM_RES_COLL_SMS00001.MachineID = SMS_R_System.ItemKey

Using this SQL statement you can build a basic report in Configuration Manager 2007 Admin Console as follows:

1. In the ConfigMgr 2007 Admin console, right-click Reports , point to New , and click Report on the shortcut menu.

2. Type TEST for the Name, and Testing NOIDMIF for the Category or choose from the existing categories.

3. Click Edit SQL Statement , and then copy and paste the SQL Statement result from your SMSROV.LOG file, then click OK , then click Next three times to accept the defaults, and then click Finish .


Before I was able to get the report to run I was getting access denied on the tables that were being queried, so I had to grant the webreporting_approle account select permission to my servers site database in SQL Management Studio. This is most likely because the default permissions for this account were not allowing the tables being queried to be selected. It only needed the Select Permission, and then the report ran without error. It is possible you could limit the scope of the grant select permissions for the webrepot_approle to the specific tables and views needed if you wanted to, however, I chose the entire database, since I am only granting it the ability to select (hence view) the contents.

Granting the Webreport_Approle account Select Permissions

I followed these steps in SQL Management Studio 2005; it should not be much different in SQL 2008. Please do not do this unless you have a current backup of the site database, and you are very comfortable performing these steps, otherwise, consult with your SQL DBA for assistance.

1. Start the Management Studio program.

2. Expand Databases , expand the SMS 2003 site database, and then expand Security .

3. Expand Roles , and then click or expand Application Roles .

4. The webreport_approle object appears in the details pane or under the Application Roles object.

5. Right click on the webreport_approle object and click Properties .

6. On the Select a page Pane on the left side of the Properties select Securables.

7. Next, click the Add button and select Specific objects , and then click OK .

8. Click Object Types button, and click to check the box next to Databases and then click OK .

9. In the Enter the object names to select … text box, type the name of your site database, for example; SMS_ABC , where ABC is your three letter site code and then click Check Names , and then click OK .

10. Next, on the top part of the screen, under the Securables , select the SMS_ABC database where ABC is your three letter site code, this entry that should appear at the top of the list, then in the lower part of the screen, under the Explicit Permissions for SMS_ABC , where ABC is your three letter site code, scroll down and place a check next to the box for the Select permission, under the Grant column.

11. Click OK and close SQL Management Studio.


This article was originally published by Microsoft's Core Infrastructure and Security Blog. You can find the original article here.