Once again thanks to all the members of the ConfigMgr community for their feedback on our Driver Automation Tool. After taking on board your suggestions and issues, version 3.4 is now available.

Whats New

  • Windows 10 Build Support: Build number support for HP systems
  • Windows 10 Build Support: SCCM & MDT paths include Windows build number for HP systems
  • Logging: Completely revised logging process. Logs can now be viewed in real time with CMTrace – “DriverAutomationTool.log”
  • Logging: Verbose logging output to the log file, Job Progress Log used for high level overview
  • Automatic Script Build Check: New script release build and notes will be displayed if a newer version is available
  • Clean Up Actions: All temporary cab, xml, msi and exe files and temporary driver extract folders created in the SCConfigMgr_Tmp folder remove on form exit
  • ConfigMgr Site Detection: The script will attempt to automatically detect the local ConfigMgr management point and site code upon launch
  • Improved Lenovo Model Download Link Detection

Fixes

  • Lenovo Windows 8.1 Driver Download Issues


Microsoft Technet Download Link
– https://gallery.technet.microsoft.com/scriptcenter/Driver-Tool-Automate-9ddcc010

Windows 10 Build Number Driver Support

Recently HP updated their XML driver file to support driver downloads for the various build numbers of Windows 10. This obviously broke the HP driver download links, so apologies for the inconvenience but it is now fixed in this release. You now have two new options in the Operating Systems drop down list, these being Windows 10 1607 and Windows 10 1703. At present these options are available for HP machines, although I have left Microsoft also enabled as the XML will soon be updated to support the new 1703 downloads.

HP EliteDesk 880 G3 Windows 10 1703 Package

To accommodate the Modern Driver Management process there is an updated version of the Invoke-CMDownloadDriverPackage PS script, which can be downloaded from this link – https://github.com/NickolajA/PowerShell/blob/master/ConfigMgr/OS%20Deployment/Invoke-CMDownloadDriverPackage.ps1 . The new OS build number will be listed in the Package Name so you can clearly identify the different build packages you have within the console. Make sure that you have at least ConfigMgr WebService version 1.2.1 installed, can be downloaded from below:


ConfigMgr WebService 1.2.1 (193 downloads)

Improved Logging

This is one of the areas which needed to be overhauled and it has!.

The Job Process Log window in the GUI will still act as a high level overview of the processes running, however a new logging function has been included to write verbose information out to a “DriverAutomationTool.log” file contained within the SCConfigMgr_Temp directory generated by the script. This should provide a more transparent view of what is happening during run time and allow you to troubleshoot any issues or modifications you have made to the script.

Automatic Script Build Check

In order to ensure you are always running the latest version of the download tool, I have included a script version check feature. Should a newer release be available, a new form will pop up notifying you of the newer build number and provide you with both the release notes and a link to the download page.

Clean Up Actions

In addition to the Driver Clean Up Options already built into the script, I have now included a clean up action on the form being closed. The following clean up actions are now taken;

  1. Removal of Driver Cab source files. The extracted drivers will remain in place.
  2. Removal of all files and folders associated with the HP driver extract process.
  3. Removal  of all XML and Cab files downloaded. This will ensure that you always have the latest model list when launching the script.

Site Server & Site Code Detection

The script will attempt to read the details of the local management point and site code from WMI on launch.

Lenovo Driver Link Detection

A newer version of the Lenovo driver script has been provided, thanks to Joe Parker (https://twitter.com/joe_lenovo) in Lenovo for his continued support to the SCCM community on this.

There has also been a correction on logic for Windows 8.1 drivers.

 

Maurice Daly
Maurice has been working in the IT industry since 1999. Technology focus includes Active Directory, Group Policy, Hyper-V, Windows Deployment (SCCM & MDT) and Office 365.

Maurice is a Microsoft MVP since 2017 in the area of Enterprise Mobility

(1933)

comments
  • Robert
    Posted at 16:30 May 4, 2017
    Robert
    Reply
    Author

    Does this support Dell?

    • Maurice Daly
      Posted at 16:49 May 4, 2017
      Maurice Daly
      Reply
      Author

      Yes as per the previous version, Acer, Dell, HP, Lenovo and Microsoft models are all supported in the one script.

  • Mark
    Posted at 17:31 May 4, 2017
    Mark
    Reply
    Author

    Great work Maurice on all these new updates to this tool.
    Did you post the correct link for Invoke-CMDownloadDriverPackage.ps1 script as this appears to still be still the old version.

    • Nickolaj Andersen
      Posted at 17:44 May 4, 2017
      Nickolaj Andersen
      Reply
      Author

      Hi Mark, I’ve just updated the script on GitHub. Was lagging a bit behind from speedy Maurice Gonzalez

  • Mike Marable
    Posted at 17:59 May 4, 2017
    Mike Marable
    Reply
    Author

    Great work guys.
    Would it be possible in a future release to set our own naming convention for the packages in ConfigMgr? For example, instead of “Drivers – – Windows 8.1 x64”, I’d like to use “Drivers – Windows 8.1 x64 – “. That way I can use a task sequence variable created dynamically for the filter for the Invoke-CMDownloadDriverPackage script.

    My task sequence builds multiple OSes, so being able to dynamically create a string to pull only those drivers for the selected OS would be helpful.

    Thanks again for all your work on these tools. Saying that they are “useful” is a big understatement.

    • Nickolaj Andersen
      Posted at 12:04 May 5, 2017
      Nickolaj Andersen
      Reply
      Author

      Hi Mike,

      The order of the naming standard doesn’t really matter, for instance “Drivers – Windows 10 x64 – Latitude XXXX” would also work. We’ve created the script so that it matches a set of variables (manufacturer, model, operating system and for some manufacturer also the Windows 10 build number). So as long as you have those things in the name of your package, the script should be able to detect it. However it doesn’t work if you have multiple OS Images in a single task sequence, that will bring back a list of “OS versions” from the web service that you’d have to manually cater for or extend the current script to suite your needs.

      Regards,
      Nickolaj

  • Tyler
    Posted at 18:33 May 4, 2017
    Tyler
    Reply
    Author

    Not that this impacts many people, but we had to add “$ComputerModel = $ComputerModel.Trim()” at ~line 105 of the Invoke-CMDownloadDriverPackage script for one of our HP models. I think it was the 8100 that reported as something like “Compaq Elite 8100 ” with a bunch of extra spaces at the end, preventing the script from matching the model and manufacturer.

    • Nickolaj Andersen
      Posted at 18:48 May 4, 2017
      Nickolaj Andersen
      Reply
      Author

      Thanks for reporting this to us Tyler. I’ll update the script with your changes. Regards, Nickolaj

      • Tyler
        Posted at 20:23 May 4, 2017
        Tyler
        Reply
        Author

        My TS are failing at this point during the driver detection script:

        # Determine OS Image version for running task sequence from web service
        try {
        $TSPackageID = $TSEnvironment.Value(“_SMSTSPackageID”)
        $OSImageVersion = $WebService.GetCMOSImageVersionForTaskSequence($SecretKey, $TSPackageID)
        Write-CMLogEntry -Value “Retrieved OS Image version from web service: $($OSImageVersion)” -Severity 1
        }
        catch [System.Exception] {
        Write-CMLogEntry -Value “An error occured while calling ConfigMgr WebService to determine OS Image version. Error message: $($_.Exception.Message)” -Severity 3 ; exit 1
        }

        Looking through the web service documentation for 1.2.0, I don’t see GetCMOSImageVersionForTaskSequence. I looked for an updated web service, but can’t seem to find a newer one.

        Thank you guys for all your help!

        • Nickolaj Andersen
          Posted at 20:39 May 4, 2017
          Nickolaj Andersen
          Reply
          Author

          Good catch, sometimes things go a little bit too fast. ConfigMgr WebService 1.2.1 has now been added as a download available in the post.

          Regards,
          Nickolaj

  • Adam
    Posted at 01:10 May 5, 2017
    Adam
    Reply
    Author

    Webservice download is throwing an error and Github and technet gallery are showing version 1.2.0 still not 1.2.1??

    • Nickolaj Andersen
      Posted at 06:45 May 5, 2017
      Nickolaj Andersen
      Reply
      Author

      Somehow the download plugin didn’t catch the file we uploaded. Should be corrected now, otherwise let me know!

  • Brandon
    Posted at 16:19 May 5, 2017
    Brandon
    Reply
    Author

    Excellent work on the tool.
    For HP systems, does this download ONLY the drivers assembled into their preconfigured full system “Driver Packs”?
    I ask because I find their driver packs to be, more times than not, out of date on individual drivers contained within the packs. Especially for Windows 10.

    • Maurice Daly
      Posted at 23:47 May 5, 2017
      Maurice Daly
      Reply
      Author

      Hi Brandon,

      Indeed the download only option still uses the same logic at the other options, so the HP Softpaq driver cab is downloaded and extracted. Unfortunately as with all manufacturers (some are better than others), there is a delay between drivers being made available for individual components and being wrapped up into SCCM driver packages.

      You could however, download and extract individual driver packages then remove/overwrite those within the driver package if there was an urgent need for the newer driver.

      Maurice

  • Brian Hoyt
    Posted at 17:32 May 5, 2017
    Brian Hoyt
    Reply
    Author

    Thanks for your work on this great tool. Does this tool pull in the same Lenovo device list as the standalone tool? I ask because none of my 4 machines are listed in the tool:
    X1 Yoga
    Yoga S1 (Gen 1)
    Yoga 12 (Gen 2)
    X131e

    • Maurice Daly
      Posted at 23:57 May 5, 2017
      Maurice Daly
      Reply
      Author

      Hi Brian,

      The tool does indeed pull the same model listings as the standalone version (which I have stopped developing btw). If you take a look at Lenovo’s SCCM support site (https://support.lenovo.com/ie/en/solutions/ht074984) you will see that the X131e is listed up to Windows 8.1 only, if this is selected in the tool the model will display.

      In regards to the other models, I will pass back feedback to Lenovo so they can ensure that the XML is fully populated.

      Maurice

      • Kevin Zachry
        Posted at 19:19 May 24, 2017
        Kevin Zachry
        Reply
        Author

        I too can’t find the X1 Yoga. To further impact things, Lenovo now has two generations of the X1 Yoga. The first row below is the 1st Gen model codes and the second row is the 2nd Gen model codes.

        — ThinkPad X1 Yoga (Machine Type: 20FQ, 20FR), X1 Carbon (Machine types: 20FB, 20FC)
        — ThinkPad X1 Yoga (Machine types: 20JD, 20JE, 20JF, 20JG)

        Lenovo has a tool called DriverGrabber_2 that will download driver packages but it uses only the same first four characters of the machine type for lookups as listed above.

        I am not sure why these models are not in their .XML

        • Maurice Daly
          Posted at 22:19 May 24, 2017
          Maurice Daly
          Reply
          Author

          Hi Kevin,

          The Yoga X1 is contained within their XML, however it is for Windows 7 32-bit only. I will drop them an email on this as using their SCCM driver download site (https://support.lenovo.com/ie/en/solutions/ht074984) it is clearly available. Lenovo are still developing the XML so think of it was v1.1 at present, hopefully they will improve upon this.

          Maurice

  • Mark
    Posted at 16:59 May 12, 2017
    Mark
    Reply
    Author

    I’m getting the error “Issues occurred while reading extracted drivers” with two HP models for Windows 7 x64 which are “HP ProDesk 600 G1 Desktop Mini PC” and “HP EliteDesk 800 G1 Base Model Ultra-slim PC”. Any ideas? I can send you the full log if needed.

    • Maurice Daly
      Posted at 17:29 May 12, 2017
      Maurice Daly
      Reply
      Author

      Hi Mark,

      Send me over the log file and I will have a look at it for you.

      Maurice

      • Mark
        Posted at 18:11 May 12, 2017
        Mark
        Reply
        Author

        Sent, let me know if you need anything else.

      • Maurice Daly
        Posted at 13:00 May 13, 2017
        Maurice Daly
        Reply
        Author

        Hi Mark,

        It would appear that there is an issue with the silent extract switch in the HP softpaq. This happened previously, basically the command uses the following switches “-PDF -F” + “$HPTemp” + ” -S -E” where the $HPTemp folder is a specified value based on the make, model and OS. The package is ignoring any value I put in during tests this morning, resulting in the drivers being extracted and immediately removed.

        I am putting in another check in the script to ensure the temp folder is created before attempting to copy the drivers and I have asked HP to clarify the situation.

        For now please do not use the script with HP downloads. Hopefully I will have word back soon and implement a fix or advise further.

        Maurice

  • Eric Holzhueter
    Posted at 21:23 May 12, 2017
    Eric Holzhueter
    Reply
    Author

    Thanks for this! I just tested and the Invoke-WebRequest calls were working with a proxy, but the file downloads were not. I found and fixed the code and the following works. The proxy needs specified and the proxy usage needs set to override.

    Driver
    Start-BitsTransfer -DisplayName “$Model-DriverDownload” -Source $DriverDownloadURL -Destination “$($DriverRepositoryRoot + $Model + ‘\Driver Cab\’ + $DriverCab)” -RetryTimeout 90 -RetryInterval 180 -Asynchronous -ProxyAuthentication NTLM -ProxyCredential $ProxyCred -ProxyUsage SystemDefault -Priority Foreground

    CorrectedDriver
    Start-BitsTransfer -DisplayName “$Model-DriverDownload” -Source $DriverDownloadURL -Destination “$($DriverRepositoryRoot + $Model + ‘\Driver Cab\’ + $DriverCab)” -RetryTimeout 90 -RetryInterval 180 -Asynchronous -ProxyList $ProxyServer -ProxyAuthentication NTLM -ProxyCredential $ProxyCred -ProxyUsage SystemDefault -Priority Foreground

    BIOS
    Start-BitsTransfer ($DellDownloadBase + $BIOSDownload.href) -Destination “$($BIOSUpdateRoot + $BIOSFile)” -RetryTimeout 90 -RetryInterval 180 -ProxyList $ProxyServer -ProxyAuthentication NTLM -ProxyCredential $ProxyCred -ProxyUsage SystemDefault

    CorrectBIOS
    Start-BitsTransfer ($DellDownloadBase + $BIOSDownload.href) -Destination “$($BIOSUpdateRoot + $BIOSFile)” -RetryTimeout 90 -RetryInterval 180 -ProxyList $ProxyServer -ProxyAuthentication NTLM -ProxyCredential $ProxyCred -ProxyUsage Override

    • Maurice Daly
      Posted at 11:27 May 13, 2017
      Maurice Daly
      Reply
      Author

      Hi Eric,

      Good find. I will update the code and publish this later on.

      Maurice

  • Eric Holzhueter
    Posted at 22:23 May 12, 2017
    Eric Holzhueter
    Reply
    Author

    The proxy check also needed updating to be $ProxyCheck.StatusDescription

    PS C:\Temp\DriverDownloadTool> $ProxyCheck | fl *

    Content : {77, 83, 67, 70…}
    StatusCode : 200
    StatusDescription : OK
    RawContentStream : Microsoft.PowerShell.Commands.WebResponseContentMemoryStream
    RawContentLength : 29962
    RawContent : HTTP/1.1 200 OK

    Before
    if ($ProxyCheck.Description -eq “OK”)

    After
    if ($ProxyCheck.StatusDescription -eq “OK”)

  • Brian
    Posted at 23:45 May 12, 2017
    Brian
    Reply
    Author

    Maurice,
    I just tried restarting the BITS and restarted the server and it will still not download the Dell Precision 7710 drivers, the other 8 I needed to download all work, IT still fails after SCCM: Driver Revision:, SCCM: File Download Failed.

    • Maurice Daly
      Posted at 11:31 May 13, 2017
      Maurice Daly
      Reply
      Author

      Hi Brian,

      If you run the script from a PS window as opposed the exe, then after the download fails exist the script and run Get-Bits-Transfer to see if there are any error messages. I presume the URL is being identified correctly in the script as it does in my environment, but perhaps send me the log file so I can compare it.

      Maurice

  • Klaus Steinhauer
    Posted at 07:30 May 16, 2017
    Klaus Steinhauer
    Reply
    Author

    Great Tool Maurice!
    Is there any way you could include the Dell Family Packs as an option?
    http://en.community.dell.com/techcenter/enterprise-client/w/wiki/11438.dell-family-driver-packs

    When it comes to Latitudes we have to support a huge number of models and adding them all manually is a pain. Thanks again for the work you put into this.

  • Chris Lamb
    Posted at 15:01 May 23, 2017
    Chris Lamb
    Reply
    Author

    Maurice,

    Looks like there is a problem with version 3.5 when attempting to download both Drivers and BIOS from Dell. If the machine has no BIOS updates, the script throws several errors beginning at line 830. To replicate just select 64-Bit Windows 10 files for the Dell Optiplex 3030 AIO

    The log files contain no errors. The errors are shown in the Powershell window.

    Thanks for the work you have put into this.

    • Maurice Daly
      Posted at 16:26 May 23, 2017
      Maurice Daly
      Reply
      Author

      Thanks Chris. I will have a look at this.

    • Maurice Daly
      Posted at 22:26 May 24, 2017
      Maurice Daly
      Reply
      Author

      Chris,

      The issue here is inconsistency in the model naming on the site used to find the BIOS link (http://downloads.dell.com/published/Pages/index.html). For some AIO devices they are listed as “AIO”, while others are “All In One”, so I will have to add in additional checks in the script to check for the presence of both.

      Maurice

  • Jared
    Posted at 03:34 May 29, 2017
    Jared
    Reply
    Author

    Thanks for the cool tool.

    Do you know of a duplicate driver cleanup tool?

  • Leave a Reply to Nickolaj Andersen
    Cancel Reply