Share via


Inventorying and Reporting Network Adapter Driver details, and how to report only the wireless type (with bonus mini-primer on SQL Report Builder) in Configuration Manager 2012

I occasionally get a question where someone wants to report on some seemingly simple piece of client information which seems, initially, to be a “no-brainer.”  Of course you can pull that information, just look,    umm,     I thought for sure that information was in here somewhere.  There’s no possible way that it isn’t, I clearly must be overlooking it…..

Hmm, it’s not there.  Then I think to myself, it must be Monday?!

So, I’ve learned over time that it’s not always the case – sometimes the seemingly most simple bits of information you want aren’t readily available for you out of the box.

So, what is a good example of this?  The most recent one I ran into was a request to report on wireless network drivers and versions.  I though for sure it would be included somewhere in Win32_NetworkAdapter or Win32_NetworkAdapterConfiguration or Win32_PnPEntity.  Nope, it’s not there, maybe I’m missing it.

So my next question – where is it?  I then came across a WMI Class called Win32_PNPSignedDriver.  Well, that’s a very interesting WMI Class with lots of good information - including the information I’m looking for – however it contains way more than just network adapters, and to make matters worse, importing the pertinent information into my Configuration Manager 2012 Hardware Inventory didn’t collect anything from this Class no matter how hard I kicked it.

That’s when I came across a blog posting written by Vinay Pamnani, which helpfully pointed out a registry key which contains all the information I needed!

The registry key for network adapter driver information is at HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318.  

As Vinay’s blog posting was created back in Feb 2010, it was clear that it was for Configuration Manager 2007.  Knowing this, it was time to take the information learned from his blog post and try it out in my trusty Configuration Manager 2012 R2 lab.

First, I (of course) made a backup copy of my configuration.mof in ConfigMgr\Inboxes\clifiles.src\hinv.  I then copied the information from Vinay’s Configuration.mof snip (see below) into my clipboard and added a few more entries I found interesting:

[ dynamic,
  provider("RegProv"),
  ClassContext("local|HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}")
  ]
  class Win32Reg_NetworkDrivers
  {
    [key]
        string    Index;
    [PropertyContext("DriverDesc")]
        string    DriverDesc;
    [PropertyContext("DriverVersion")]
        string    DriverVersion;
    [PropertyContext("DriverDate")  ]
        string    DriverDate;
    [PropertyContext("ProviderName")]
        string    ProviderName;
    [PropertyContext("*MediaType")  ]
         string    MediaType;
    [PropertyContext("RemoteWakeEnable")  ]
        string    RemoteWakeEnable;
    [PropertyContext("*WakeOnMagicPacket")  ]
        string    WakeOnMagicPacket;
  };

Next, I pasted it into my configuration.mof on my CAS (yes, even at my own home there’s enough politics to cause me to have a CAS).  Next, I simply pasted it between the section at the bottom in between “// Added extensions start” and “//Added extensions end” and saved it, so the final result looked like this:

image

This change provided my Configuration Manager hierarchy the knowledge about this registry key and all of the information of my interest within the key.  Looking at this key, there are a plethora of other values to collect, but the only ones I added over and above Vinay’s example were: Provider, RemoteWakeEnable, and *WakeOnMagicPacket.  If desired, I could’ve easily gathered additional information from this key such as the wireless roaming aggressiveness settings, whether or not the wireless radio is enabled, preferred wifi channel, PNP Device info - the list goes on.

Next, I copied the information for the SMS_DEF.MOF file, but once again, I added the additional information for ProviderName, RemoteWakeEnable, and WakeOnMagicPacket to let my ConfigMgr site know that I also want it to collect the information stored in these registry values during my client hardware inventories.  All of this will be inserted into the new SQL View it will automatically create named “v_GS_NETWORK_DRIVERS”.

Here’s what I ended up with for my MOF to import into my Hardware Inventory:

#pragma namespace ("\\\\.\\root\\cimv2\\sms")
  [ SMS_Report     (TRUE),
  SMS_Group_Name ("Network Drivers"),
  SMS_Class_ID   ("MICROSOFT|NETWORK_DRIVERS|1.0"),
  Namespace      ("\\\\\\\\localhost\\\\root\\\\cimv2") ]
  class Win32Reg_NetworkDrivers : SMS_Class_Template
  {
    [SMS_Report (TRUE), key ]
        string Index;
    [SMS_Report (TRUE)      ]
        string DriverDesc;
    [SMS_Report (TRUE)      ]
        string DriverVersion;
    [SMS_Report (TRUE)      ]
        string DriverDate;
    [SMS_Report (TRUE)      ]
        string MediaType;
    [SMS_Report (TRUE)      ]
        string ProviderName;
    [SMS_Report (TRUE)      ]
        string RemoteWakeEnable;
    [SMS_Report (TRUE)      ]
        string WakeOnMagicPacket;
  };

Knowing there’s no longer an SMS_DEF.MOF that exists in clifiles.src/hinv on ConfigMgr 2012, I instead pasted it into a new file I created in Notepad and named it something memorable but only slightly witty such as “wifidriversarefun.MOF”.  I went to my Administration/Client Settings and modified my Default Client Settings on my CAS.  Next, I drilled into the Hardware Inventory section of my Default Client Settings (note: you MUST select Default Client Settings) and clicked the “Set Classes” button:

image

Next, click “Import” and browse to the “wifidriversarefun.MOF” file you saved.

image

Leave the “Import Summary” option at the default of “Import both hardware inventory classes and hardware inventory class settings”.  Once again click the “Import” button.

image

I also left all of the class settings checked since I wanted everything that I defined in both my configuration.mof and my imported Hardware Inventory MOF, and clicked OK a couple times.

image

Next, go to Monitoring->Reporting->Reports and click “Create Report”

image

The “Create Report Wizard” will appear.  Select “SQL-based Report”, give it a memorable name, and select which folder on your SSRS you want to store it in.  Click “Next", “Next”, “Close”.

image

Once SQL Report Builder 3.0 appears, select “Table or Matrix”:

image

And then “Create a Dataset”.  The “New Table or Matrix” wizard appears with your Data Source Connection to your ConfigMgr 12 database.  Click the “Test Connection” to confirm all is well.

image

If you don’t have the required permissions with your currently logged on account, instead of using your currently logged on credentials, type in the login credentials for an account which has the appropriate permissions to the site database, and click “Next”.

In the “Design a query” wizard, expand dbo –>Views:

image

Next, expand v_GS_NETWORK_DRIVERS and select the values that you want included in your report; first from v_GS_NETWORK_DRIVERS to get the new Network Adapter Driver information:

image

Then, select Name0 from the v_GS_System view so that you will also get a computer name included.

image

Click on “Auto Detect”, and then click the “Add Relationships” button to the right of “Edit Fields”

image

Single click into the “Left Table”, selecting one of the two tables, then single click into the “Right Table”, and of course select the other view.  Your join can be Inner, Left Outer, Right Outer, or Full Outer, but I’m not going to go into depth on SQL joins today, so you can read more about them here.

image

Now, click the “Add Field” button:

image

Under the “Left Join Field”, select “ResourceID”.  Then under the “Right Join Field” column, once again select “ResourceID”.  ResourceID is the field which you should always be familiar with as pretty much every report that contains information about clients has a unique ResourceID value which identifies each client and allows you to join the various views together for reporting purposes.

image

Now the final result should appear like this:

image

If all is well, click “Next” to continue, and on the “Arrange fields” step, drag “Name0” to the “Row groups” box, and the rest of the information you want associated with each computer name to the “Values” box” and click “Next”.

image

Uncheck the “Show subtotals and grand totals” and “Expand/collapse groups” checkboxes.

image

Select your favorite SSRS style:

image

Now you should have a nice report showing each of your network adapters and their pertinent driver information, as well as some additionally helpful wake-on-lan information.  You can also customize the column names to something more meaningful as I have below (ie. Name0 –> Computer Name):

image

Now, if you want to filter it down to only the wireless network adapters, under Datasets,  right-click “DataSet1” and click “Properties”.

image

Then click “Filters” and click "Add” to add a filter:

image

In “Expression” field, select “MediaType0”.  Leave the Operator at "=”, and the value of MediaType0 for all wireless adapters happens to be a value of “16”.

image

Save the report, run it again, and viola, only the wireless network adapters and their driver information will magically appear for each client, along with their driver dates, descriptions, versions and WakeOnLan settings.

Now, for an extra bonus, if you want to be able to click on any client and have it show you some additional Network Adapter information for a specific client, right click in the [Name0] cell, and click “Text Box Properties”

image

Click “Action” and in the “Change Action Options” section, select the “Go to report” radio button, click “Browse”, and browse to the Hardware – Network Adapter / “Network Adapter information for a specific computer” report.  Under “Use these parameters to run the report”, click “Add”, select “variable” in the Name field, and “[Name0]” in the Value field, and click OK.

image

Now, run the report and pat yourself on the back for making it to the end of this blog post (and hopefully you even have a working report!)

Comments

  • Anonymous
    January 01, 2003
    Make sure the clients have received the new policy, and then make sure at least one client has run a hardware inventory. Once that occurs, it should create the view automatically. Until at least 1 client does this, the view will not exist in SQL. You can check SQL Management Studio to look for the v_GS_Network_Drivers view to see if it exists.
  • Anonymous
    January 01, 2003
    thanks
  • Anonymous
    January 01, 2003
    Ah figured it out; you have to do the import on "Default Client Settings" and not on any custom client settings that you may have set up. Thanks for this article!
  • Anonymous
    January 01, 2003
    When I try to import the mof file under Hardware Inventory Classes I just get a message saying that the "class does not exist". Did I leave out a step?
  • Anonymous
    January 01, 2003
    This is a really good walk though, thanks for the walk through Russ. I do have a question though, do you know how you could limit the report portion of this walk through by Collection only? I'd like to target only specific collections with this report and am not quite sure how to do this.
  • Anonymous
    January 01, 2003
    Very useful and detailed. Thanks for sharing
  • Anonymous
    January 01, 2003
    Hmm, try giving the configuration.mof some time to propagate out. My guess is when you import the client setting .mof, if fhe Win32Reg_NetworkDrivers WMI class doesn't yet exist (you might check to confirm this as well), it will likely complain.
  • Anonymous
    January 01, 2003
    Thanks, very interesting
  • Anonymous
    January 01, 2003
    Sorry, working now. Thanks! Management Point issue causing general problems for my environment.
  • Anonymous
    January 01, 2003
    Yes it should work just fine on 2007 since it's really dependent on the registry keys on the clients existing and inventorying them which 2007 can also do. Of course, with 2007 you won't use client settings to import the custom MOF, you'll have to add it to your SMS_DEF.MOF instead.
  • Anonymous
    January 01, 2003
    As far as I can see, I'm following this step by step to the letter, but when I run the report, I only get the column names. No machines are listed (I have over 1000 clients which are showing up in my other reports).
    Anything else I could be doing wrong?
  • Anonymous
    January 01, 2003
    Scott - Did you also modify your configuration.mof as well?
  • Anonymous
    January 07, 2014
    Pingback from Inventorying Scanners, Digital Cameras, and WebCams in Configuration Manager 2012 - Russ Rimmerman - ConfigMgr Guy - Site Home - TechNet Blogs
  • Anonymous
    January 07, 2014
    Pingback from Inventorying Scanners, Digital Cameras, and WebCams in Configuration Manager 2012 - Russ Rimmerman - ConfigMgr Guy - Site Home - TechNet Blogs
  • Anonymous
    January 07, 2014
    Similar to one of my past blog posts on how to go about collecting network adapter driver information
  • Anonymous
    March 19, 2014
    The v_GS_Network_Drivers view isn't showing-up while creating the report. Any clue?
  • Anonymous
    May 29, 2014
    Worked perfectly! Thanks!
  • Anonymous
    June 03, 2014
    This is a particularly brilliant article I think, very well written and illustrated!!! Thanks a lot.

    Incidentally, I also created a new Client Setting config to test this and received the error which was resolved this way: "you have to do the import on "Default Client Settings" and not on any custom client settings that you may have set up".

  • Anonymous
    June 04, 2014
    "Under “Use these parameters to run the report”, click “Add”, select “variable” in the Name field, and “[Name0]” in the Value field, and click OK."

    This does not work for me, i cannot select variable because there is nothing in the drop down, if i type it in and then run the report i get the error "An attempt was made to set a report paramter 'variable' that is not defined in theis report . (rsUnknownReportParameter)"

    Any ideas?

    Also, can you advise how to select multiple values in the filter? I want to only see adapter types 0 and 16, but clearly adding multiple filters results in an AND not an OR because nothing is returned.

    Thanks in advance
  • Anonymous
    October 13, 2014
    worked perfectly Russ. Thank you :-)
  • Anonymous
    November 04, 2014
    Worked like a charm with SCCM 2012 R2.
    Been trying to do this for ages, Will definitely share your post
    Thanks
  • Anonymous
    February 23, 2015
    Will this work on Config Mgr 2007?
  • Anonymous
    April 28, 2015
    The comment has been removed
  • Anonymous
    April 29, 2015
    Of course not! :-)

    I thought of that as soon as I clicked POST on my previous comment. It is working fine now that I have updated the configuration.mof.

    Thank you again Russ.
  • Anonymous
    July 28, 2015
    Is there a way to easily do this as a Configuration Item in SCCM 2012? I'm trying to reach a certain compliance level for new wireless drivers we are pushing via a third party (Lenovo). I need to know machines are compliant without having to wait for the next hardware scan.
  • Anonymous
    July 28, 2015
    You can certainly check registry keys and their associated values with a CI, so I don't see why not...
  • Anonymous
    October 02, 2015
    Hi ! First of all thank you for the article. It has been a great guide for my implementing it on several of our SCCM 2012 R2 environments. The report "Network Adapter Drivers" reports on all drivers on Windows 8.1 Enterprise x64 systems. But I have some trouble on Windows 8 and Windows 7 systems. I only see one driver on those 7 and 8 systems, the "WAN Miniport (SSTP)" to be specific.

    I have checked the registry keys on a Windows 7 Enterprise x64 system. I have most of the values in the registry path < HKLMSYSTEMCurrentControlSetControlClass{4d36e972-e325-11ce-bfc1-08002be10318} >. In Windows 8.1 I find these values in < ..{4d36e972-e325-11ce-bfc1-08002be10318}�002 >. In Windows 7 I find the velues in < ..{4d36e972-e325-11ce-bfc1-08002be10318}�011 > and < ..{4d36e972-e325-11ce-bfc1-08002be10318}�027 > for the WiFi driver that I'm looking for in my reports. I see the keys DriverDesc, DriverVersion, DriverDate, ProviderName and *MediaType in both paths. I'm missing the RemoteWakeEnable and *WakeOnMagicPacket. But none of these WiFi driver information is to be found in the report "Network Adapter Drivers".

    Has anyone else noticed this ? Or am I missing something ?
  • Anonymous
    October 02, 2015
    Never mind. I discovered that Excel can't handle the amount of information. The applied automatic filter does not work well with the merged cells in the "Network Adapter Drivers" exported excel file.
  • Anonymous
    September 23, 2016
    Has anyone tried this on Windows 10? I have a number of Lenovo T560s that do not show up in the report.