Configuration ManagerHow-to

Extending hardware inventory: adding WMI classes and troubleshooting InventoryAgent.log

Add a WMI class to Configuration Manager hardware inventory, pilot it, and follow the data from InventoryAgent.log through MP_Hinv.log and dataldr.log to Resource Explorer.

Default hardware inventory covers the basics, but sooner or later you need data it doesn't collect — a vendor's BIOS class, a Windows security status, or values your scripts write to WMI. In this post I'll add a class through client settings, pilot it, and follow the data from InventoryAgent.log on the client to dataldr.log on the site server and into Resource Explorer.

Errors this guide fixes

  • 0x80041010InventoryAgent.log
  • 0x8004100EInventoryAgent.log
How this guide is organised: How it works → Prerequisites → Step-by-step → Verify → Tips & gotchasFlow diagram of the article's sections in reading order: 1. How it works. 2. Prerequisites. 3. Step-by-step (4 steps: Confirm the class on a reference device; Add the class in Default Client Settings; Data that isn't in WMI: Configuration.mof; Push the policy and inventory a pilot device). 4. Verify. 5. Tips & gotchas. Toolbox: 0x80041010, 0x8004100E, dataldr.log, InventoryAgent.log, Administration › Client Settings.1How it works2Prerequisites3Step-by-step4Verify5Tips & gotchas1Confirm the class on areference device2Add the class in DefaultClient Settings3Data that isn't in WMI:Configuration.mof4Push the policy andinventory a pilot deviceTOOLBOX0x800410100x8004100Edataldr.logInventoryAgent.logAdministration › Client SettingsHow this guide is organised: How it works → Prerequisites → Step-by-step → Verify → Tips & gotchasFlow diagram of the article's sections in reading order: 1. How it works. 2. Prerequisites. 3. Step-by-step (4 steps: Confirm the class on a reference device; Add the class in Default Client Settings; Data that isn't in WMI: Configuration.mof; Push the policy and inventory a pilot device). 4. Verify. 5. Tips & gotchas. Toolbox: 0x80041010, 0x8004100E, dataldr.log, InventoryAgent.log, Administration › Client Settings.1How it works2Prerequisites3Step-by-step1Confirm the class on a reference device2Add the class in Default Client Settings3Data that isn't in WMI: Configuration.mof4Push the policy and inventory a pilot device4Verify5Tips & gotchasTOOLBOX0x800410100x8004100Edataldr.logInventoryAgent.logAdministration › Client Settings
At a glance: how this guide is organised · 4 steps · 5 key settings and tools

How it works#

Hardware inventory in Configuration Manager (still widely called SCCM or ConfigMgr) reads WMI on each client according to its inventory policy, which has two parts:

  • Reporting classes — which WMI classes and properties to collect, managed in client settings under Hardware Inventory › Set Classes.
  • Data classes — Configuration.mof in Inboxes\clifiles.src\hinv\ on the top-level site server defines extra data classes (registry-based ones, for example) and the providers that read them. Clients receive it with policy and compile it automatically.

After an inventory cycle, data flows from the client (InventoryAgent.log) through the management point (MP_Hinv.log) to the site server's data loader (dataldr.log) and into the database, where each class gets a current view (v_GS_...) and a history view (v_HS_...).

MethodUse it whenWhere
Enable/disableThe class is already listedDefault or custom device settings
AddThe class exists in client WMI but isn't listedDefault Client Settings, top-level site only
ExtendThe data isn't in WMI yetConfiguration.mof, then Add
Import/exportMoving definitions from lab to productionSchema imports: Default Client Settings only

Note: If a device receives hardware inventory settings from several client settings objects, the class selections are merged — clearing a class in a higher-priority custom setting does not stop collection. To collect a class on only some devices, clear it in Default Client Settings and enable it in a custom setting deployed to them.

Prerequisites#

  • A console connected to the top-level site (CAS or standalone primary) and permission to modify Default Client Settings.
  • A reference device where the class exists, and WMI access to it.
  • A pilot collection with its own custom device client settings.

Step-by-step#

1. Confirm the class on a reference device#

Check the namespace, the data and the key property. My example is Win32_DeviceGuard, which reports virtualization-based security and Credential Guard status:

PowerShell
$ns = 'root\Microsoft\Windows\DeviceGuard'
Get-CimInstance -Namespace $ns -ClassName Win32_DeviceGuard
# Key properties (if nothing is returned, you'll choose a key when adding the class)
(Get-CimClass -Namespace $ns -ClassName Win32_DeviceGuard).CimClassProperties |
  Where-Object { $_.Qualifiers.Name -contains 'key' } | Select-Object Name

Already listed under Search for inventory classes in Set Classes? Just select it and skip to step 4.

2. Add the class in Default Client Settings#

  1. Go to Administration › Client Settings, open Default Client Settings and select Hardware Inventory › Set Classes.
  2. Choose Add, then Connect. Enter the reference computer and namespace (select Recursive only if you need classes below it) and credentials if the computer isn't local.
  3. Select the class and choose Edit. Set a Display name (shown in Resource Explorer), units, and a key property — without a key, only the latest of several instances is stored.
  4. If a non-key string can exceed 255 characters, increase its Length now; that's only possible on newly added classes.
  5. To pilot, clear the new class in Default Client Settings and enable it in your pilot custom settings.

The site then updates client policy; dataldr.log on the site server records the change.

3. Data that isn't in WMI: Configuration.mof#

For registry values and other non-WMI data, define a data class in Configuration.mof on the top-level site. Back it up first and edit only the Added extensions section at the end — site updates overwrite everything above it (the site keeps a copy of your customised file in data\hinvarchive\). Check syntax on a copy with mofcomp -check. Then watch dataldr.log pick up the change, refresh policy on a client so it compiles the class, and add it from that client as in step 2.

4. Push the policy and inventory a pilot device#

Refresh machine policy, wait a few minutes, then run the hardware inventory cycle; deleting the inventory action status first forces a full report instead of a delta:

PowerShell
# Machine policy retrieval, then evaluation
'{00000000-0000-0000-0000-000000000021}', '{00000000-0000-0000-0000-000000000022}' | ForEach-Object {
  Invoke-CimMethod -Namespace root\ccm -ClassName SMS_Client -MethodName TriggerSchedule -Arguments @{ sScheduleID = $_ }
}
# Optional: force a full report
Get-CimInstance -Namespace root\ccm\invagt -ClassName InventoryActionStatus `
  -Filter "InventoryActionID='{00000000-0000-0000-0000-000000000001}'" | Remove-CimInstance
# Hardware inventory cycle
Invoke-CimMethod -Namespace root\ccm -ClassName SMS_Client -MethodName TriggerSchedule `
  -Arguments @{ sScheduleID = '{00000000-0000-0000-0000-000000000001}' }

For a collection, use Client Notification › Download Computer Policy, then Collect Hardware Inventory.

Verify#

Follow the data end to end#

  1. Client — in C:\Windows\CCM\Logs\InventoryAgent.log, find the hardware action, a collection query for your class and a successful send to the management point (trimmed):
    Text
    Inventory: Action=Hardware, ReportType=Full, ...
    Collection: Namespace = \\.\root\Microsoft\Windows\DeviceGuard; Query = SELECT ... FROM Win32_DeviceGuard; Timeout = 600 secs.
    Inventory: Successfully sent report. Destination:mp:MP_HinvEndpoint, ...
  2. Management point — MP_Hinv.log shows the report received, converted and passed to the site server.
  3. Site server — dataldr.log processes that machine's file without errors. Files it can't process move to a BADMIFS folder under the dataldr.box inbox.
  4. Console — right-click the device, choose Start › Resource Explorer and expand Hardware: your display name appears with data, and Workstation Status shows a fresh last hardware scan.

If the class doesn't arrive#

SymptomLikely causeWhat to do
No query for the class in InventoryAgent.logNo new policy yet, or no settings it receives enable the classRefresh policy; check the device is in your custom settings' collection
The query is logged with a WMI errorClass or namespace missing (0x80041010 invalid class, 0x8004100E invalid namespace), or WMI unhealthyRun the step 1 commands there; vendor classes often exist only on some models
Report sent, nothing in Resource ExplorerProcessing problem at the MP or site serverRead MP_Hinv.log, then dataldr.log; check BADMIFS
Only one row per deviceNo key property definedSet a key property in the class qualifiers

Tips & gotchas#

  • Collect only what you need. Every class and property enlarges the report each client sends and the site processes.
  • Never inventory Win32_Product. Querying it makes Windows Installer run a consistency check on every MSI product; the built-in installed software classes already cover software.
  • Review classes around site updates. An update can return some classes to their default state, so export your selection (Set Classes › Export) beforehand and compare afterwards.
  • Static data doesn't need WMI. For asset tags and similar values, custom device properties set through the administration service (version 2107 and later) are simpler than a new class.
  • Collections on inventory data behave differently with incremental updates — see collections that perform.

References#

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)