Configuration Manager Extend Hardware Inventory for Software

I recently posted about creating some collections based on queries for the Recast Software. Someone on twitter pointed out that it would be better to use "Installed Software" instead of "Install Application" for the query, while I don't disagree, depending on your reasons, Installed software is not included in Hardware Inventory by default, so unless you went out of your way to enable it (and you should), you could not use it in a query.

So lets talk about the differences first [Hardware Inventory MS Docs]

  • Installed Applications and Installed Applications (x64) is raw data from the uninstall keys in the registry.
  •   HKLM:\software\microsoft\windows\current version\uninstall
  •   HKLM:\software\wow6432node\microsoft\windows\current version\uninstall
  • Installed Software pulls from Asset Intelligence, which is a combination of multiple locations. [MS Docs]

Based on the application, it might show up in Installed Applications or Installed Applications (x64), where as there is no doubt it will show up in "Installed Software". What that means, if you use the Installed Software class in your queries, you can rest comfortably that you'll get the Machines with the software into the collection.

First off, lets take a look at trying to add a query based on Installed Software

Working on Creating a Collection, added a query then choosing "Installed Software".. but before that I'm going to show you what is under "Installed Applications"
Installed Applications
And look, nothing. This query wouldn't work so well.

So lets see what is needed to enable that class to be used in queries.

In the Administration Node, in Client Settings, pick your Client Setting you want to modify, I'm going to use the default, I personally can't think of a reason not to enable it on the Default. Once you in the settings, go to Hardware Inventory, click on "Set Classes"
The Installed Application classes are enabled by default, but not the Installed Software
Lets check that Box for "Installed Software" and click OK
You'll want to trigger both a Machine Policy Update (So it gets the new Client Settings), the Trigger the Hardware Inventory. I used the handy dandy Right Click Tools for that.
So after a few minutes to wait for inventory to role in, you can now see that I have information in the "Installed Software" to use in the Queries.
I used Collection Evaluation Viewer to see if the collections evaluated differently with different queries.

From the results, doesn't appear much difference in the the queries used. I ran "Update Membership" several times and they were always pretty close.  However, this lab only has a few machines and probably pretty good hardware, so it's not really representative  of a normal production environment, so feel free to setup both versions of the query for some software and then check them out in Collection Evaluation Viewer

So now you've got another way to get data about the software installed on your machines.

Ok, I've run CEViewer when I have a little more data available, and using an application I know is installed on a large % of machines, it seems like Installed Software took longer to run the query, but it also found more devices, so unsure what that's about.

You can see that the time for Installed software is about another 40 seconds, like 30% longer. Overall, not a big deal.
Running a Update of the Collection after the initial run was much faster, but you can still see a large time gap between them
For Context, those are the member counts after evaluating the software. Installed Software found a few more machines, not exactly sure why.