Inventorying and Reporting on driver information with ConfigMgr

In regards to drivers and BIOS updates on workstations in your environment, a lot of organizations have held the mindset for many years that ‘If it ain’t broke, don’t fix it!‘. We did too up until we had a Windows Desktop RaaS with Microsoft in 2014.

Blog info: https://blogs.technet.microsoft.com/askcore/2014/02/10/rap-as-a-service-raas-from-microsoft-services-premier-support/

Premier Services site: https://services.premier.microsoft.com/assess?

What we found is that by not managing our driver and BIOS versions, we had no baseline, and there for a very difficult time troubleshooting hardware and performance related issues. Now we inventory our driver information in SCCM, and can report on how we are doing with versions out in our environment. This information is not available out of the box, so it takes a little setup.

Inventoring the Win32_PnpSignedDriver WMI class

Like all scripts, they should be written in PowerShell, so I created one for a SCCM Script Compliance Item in PowerShell.

A few notes:

  • A new WMI class Win32_PnpSignedDriver_Custom is created. Edit $NewClassName if you would like to change it.
  • The custom class is deleted and recreated on each run
  • The following Properties are inventoried: DeviceClass, DeviceName, DriverDate, DriverProviderName, DriverVersion, HardwareID, DeviceID
  • The timestamp is inventoried
  • Feel free to edit the filter for your own organizations needs
    • $_.DeviceClass -ne ‘VOLUMESNAPSHOT’ -and $_.DeviceClass -ne ‘LEGACYDRIVER’ -and $_.DriverProviderName -ne ‘Microsoft’ -and $_.DriverVersion -notlike “2:5*”

Once the script has been deployed and ran on a few machines, just connect to WMI and you can add the new Win32_PnpSignedDriver_Custom class to your SCCM hardware inventory.

PnPSignedDriverCustomHINV

Reporting on driver versions

Once you have the data in your inventory, you just need to report on it.

The SQL view v_gs_pnp_signed_driver_custom gets created from your hardware inventory and contains all the raw data. Here are a few sample SQL queries:

Here is a look at some of the raw data:

PnPSignedDriverCustomSQL

It was asked by a few members of the community what impact this may have on your database, and how large the table may be. My data is below, but you will need to judge for yourself if this would be an impact to your environment.

There are 77,767 unique resource IDs (total clients reporting) in this table in our environment.

TableName SchemaName RowCounts TotalSpaceKB UsedSpaceKB UnusedSpaceKB
PNP_SIGNED_DRIVER_CUSTOM_DATA dbo 0 32 32 0
PNP_SIGNED_DRIVER_CUSTOM_DATA dbo 639759 514512 512840 1672
PNP_SIGNED_DRIVER_CUSTOM_DATA dbo 983014 767456 764480 2976
PNP_SIGNED_DRIVER_CUSTOM_DATA_DD SCCM_Ext 911122 40752 40656 96

We use the two LAN and WLAN queries above to create a network driver dashboard to report on how standardized we are. We highlight the current standard versions to quickly see any drift.

NetworkDriverDashboard

Enjoy!

6 thoughts on “Inventorying and Reporting on driver information with ConfigMgr

  1. I couldn’t resist commenting. Very well written!

  2. Peter Asp

    This is terrific, Ive been working figuring out how to create driver baselines for weeks with no success. I’m having trouble getting the inventory class into SCCM 2012. Can you provide some more details? Thanks

  3. […] default SCCM doesn’t collect drive info. Potent Engineer have a great post about adding driver info to […]

  4. Felix

    Looks clean. What if any impact on HINV if managing 10k endpoints?

    • The only impact is the size of your DB. We inventory over 100 things with HINV, and it runs in about 60 seconds on all of our machines.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">