Driver Automation Tool - Automate Driver Downloads & Packaging for SCCM/MDT

The script generates a PowerShell GUI to automate the processes of downloading, extracting and importing driver packages for Dell, Lenovo, HP and Microsoft systems.

 
 
 
 
 
4.9 Star
(115)
47,024 times
Add to favorites
System Center
12/5/2019
E-mail Twitter del.icio.us Digg Facebook
Sign in to ask a question


  • HP Extract fails
    1 Posts | Last post Sat 6:42 PM
    • I have problems with downloading HP drivers, for example ZBook 15 G6. It downloads the file but seem unable to extract the files. from the log it seems the path to the file it want to extract is missing the file.exe, only the folder names are there.
      
      ---
      Info: Using Hewlett-Packard silent switches: -PDF -FC:\Program Files\SCConfigMgr\Driver Automation Tool\Temp\HPBIOSTemp\Zbook 15 G6 Mobile Workstation\Extract\ -S -E
      ---
      
      Also it would be great if there was an option to disable the automatic "get models" every time the tools starts. 
      
      Why is it using the temp folder under Program Files as a work folder? This should be moved to another location. If this was changed the requirement for admin rights on local machine would be gone(?).
  • Cleanup deletes too many Drivers
    4 Posts | Last post Sat 12:43 AM
    • Hi,
      
      I´ve just upgraded to 6.4.0 and found the folowing Issue.
      
      This is affecting the following 4 Devices (maybe more, but not owning all Models from Dell):
      
      Optiplex 9020
      Optiplex 9020M
      Dell Latitude 7400
      Dell Latitude 7400 2-in-1
      
      When using all Cleanup Options, only 1 Driver Package will remain in SCCM.
      
      First Run: 
      Optiplex 9020M will remain, Package for Optiplex 9020 will be removed.
      Latitude 7400 2-in-1 will remain, package for Latitude 7400 will be removed.
      
      Re-Running the Tool:
      Optiplex 9020 will be added, Package for Optiplex 9020M will be removed.
      Latitude 7400 will be added, package for Latitude 7400 2-in-1 will be removed.
      
      I´ve manually added the missing 2 for now, but i think they will be removed/replaced with the next run.
      
    • I'm assuming this is the superseded package option you are running. I think I can see the reason, let me sort that out and post an update.
    • I'm seeing this to be an issue for all references of the OptiPlex 9020 (9020, 9020M, 9020 AIO). It will only keep one and delete the other ones stating that they are superseded. Please post what you figure out :D 
      
      Thanks for all your work on this
    • Just wanted to bump this issue as it's still present in 6.4.1. 
      
      After doing an initial import, I have to deselect the 7400, select the 7400 2-in-1, and then deselect the option to remove superseded driver packages. The workaround seems to work for now, but it's not ideal.
  • Surface Broken again?
    2 Posts | Last post Fri 12:02 PM
    • Doesn't seem to be able to download any surface drivers again.  If you had downloaded other drivers, it will re-use the variable for the last package and fail.
      
      If you download "just" surface drivers it simply never downloads anything.
    • So, dug a bit deeper.  In Invoke-ContentDownload, it fires off a job for BITS and then goes to sleep for 10 seconds.
      
      If the powershell job finishes *before* the 10 seconds are up, the BitsJobByteSize variable doesn't get set (As the Bits Job gets completed), so the driver download fails because that value is NULL.  At least, that's what happened to me.  I changed the sleep to 2 seconds instead of 10 and now they all import.
      
      It's dangerous with all of the global variables and troubleshooting; they frequently get left behind and get re-used inadvertently.
  • Query / function optimizations (2 of 2)
    2 Posts | Last post Thu 10:36 PM
    • For known model query optimization, I updated the HP query at line 10883 to this:
      
      	if (-not ([string]::IsNullOrEmpty($SiteServer))) {
      		$HPKnownModels = (Get-WmiObject -ComputerName $SiteServer -Namespace "root\SMS\site_$SiteCode" -Class SMS_G_System_COMPUTER_SYSTEM -Filter "(Manufacturer = 'HP' or Manufacturer = 'Hewlet-Packard') and not Model like 'Proliant%'" | Select-Object -Property Model).Model | Sort-Object | Get-Unique -AsString
      	}
      
      This moves the filtering into the WMI query and removes the need for where-object.  The same can be done for the Dell & Lenovo queries.  I only bothered with the HP query as we're an HP / Microsoft shop.
      
      The Microsoft known model query section got cleaned up a lot (it was running the wmi query twice, plus there was no validation of the $QueryKnownModels variable.  This replaced lines 11124-11130, the last line is unchanged but listed to help identify placement:
      
      	if ($QueryKnownModels -eq $true) {
      		if (-not ([string]::IsNullOrEmpty($SiteServer))) {
      			$MSKnownModels = $null
      			$MSKnownModels = Get-WmiObject -ComputerName $SiteServer -Namespace "root\SMS\site_$SiteCode" -Class SMS_G_System_MS_SYSTEMINFORMATION -Filter "SystemManufacturer = 'Microsoft Corporation' and SystemProductName like '%Surface%'"
      			if ($MSKnownModels) {
      				$MicrosoftKnownModels = ($MSKnownModels | Select-Object -Property SystemManufacturer, SystemProductName, SystemSKU | Get-Unique -AsString) | Sort-Object	
      				if (($MicrosoftModels).Count -gt 0) {
      
      
      And of course a } inserted further down at 11150 to close out the added if statement.
      
      These changes have greatly improved the performance of the tool for us.
    • Thanks for the feedback
  • driver import
    6 Posts | Last post Thu 10:36 PM
    • Hi also having trouble when trying to use ConfigMGR - Driver PKG. After it is downloaded and unpacked then tries to create driver package to SCCM but getting such error:
      
      <![LOG[Error: The SMS Provider reported an error. System.Management.ManagementException: Generic failure 
         at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
         at System.Management.ManagementObject.Put(PutOptions options)
         at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlResultObject.Put(ReportProgress progressReport)]LOG]!>
    • I too am getting the same error when trying to import
    • Did you ever find a solution to this?  I have the same issue, it downloads and extracts then fails when importing.
    • In our case it was because the SYSTEM account didn't have enough rights on the share where the Drivers & Packages were put. Granting the site-servers SYSTEM account full access on that file share resolved it for us.
      
      Before you go running around wildly granting access, try to import those drivers via the console, we also got an error there which helped me to find the permissions problem.
      
      Hope it helps!
    • If @Oxyma IT solution doesn't help, we were getting a similar error and it turned out to be caused by the Driver Cleanup step. 
      When Driver123 was imported for Model-A, the source file was deleted. Then when Model-D also had Driver123 and the tool tried to append a category, it triggered an error because the source content was missing. 
      Ultimately we deleted all Drivers, Packages, & Categories, disabled the Driver Cleanup, and rebuilt all driver packages using the tool. But I'm pretty sure we could have just re-downloaded the content to the DriverDownload path to make SCCM happy and stop the errors. 
      
      tl;dr - If you're using legacy driver packages, wait until all packages are created before cleaning up download content. 
    • Hi Everyone.
      
      Sorry for not replying sooner. I have noted this issue and I will fix it in the next build.
  • Query / function optimizations (1 of 2)
    1 Posts | Last post Thu 11:04 AM
    • First I just want to say this tool and Modern Driver/Bios Management are amazing and have saved me so much time.  Great work!
      
      That said, I have some suggestions.  Our environment has over 60k clients and 80+ DPs.  Due to this some of the queries / functions take *forever* the way they are currently structured.
      
      The Connect-ConfigMgr function is executed 4 times in a row on startup.  Adding a check for the $global:ConfigMgrValidation variable in a couple places seems to do the trick.
      
      Lines 632-633 I encapsulated in an If statement:
      
      	if ($global:ConfigMgrValidation -ne $true) {
      		global:Write-LogEntry -Value "Deployment Platform: SCCM - Validating ConfigMgr Server Details" -Severity 1
      		Connect-ConfigMgr
      	}
      
      The section around line 11439 in the Set-ConfigMgrOptions function now looks like this (I believe this is the main offender of the repeat executions of Connect-ConfigMgr):
      
      	if (-not $OptionsEnabled) {
      		$global:ConfigMgrValidation = $false
      	}
      	if (($PlatformComboBox.SelectedItem -match "ConfigMgr") -and (-not ([string]::IsNullOrEmpty($SiteServerInput.Text))) -and ($global:ConfigMgrValidation -ne $true) -and ($OptionsEnabled)) {
      		Connect-ConfigMgr
      	}
      
      This way we're only running the function if we're enabling ConfigMgr mode and we haven't yet validated the connection.  It also automatically sets $global:ConfigMgrValidation to $false when its disabled.
      
      (continued in next post)
      
      
  • Set a ConfigMgr Security Scope
    1 Posts | Last post Wed 5:16 AM
    • Looking back through lots of questions, I don't see anyone mention anything about setting a security scope to the driver packages as they are created.  Is there a way to do that?  I don't see anything in the Driver Automation Tool settings.  If not, has there been any efforts to make that an option?
  • Lenovo Driver Download Error
    1 Posts | Last post Wed 1:57 AM
    • Error: Unable to find driver for Lenovo ThinkCentre M920z.
      
      Found it in the selection list but fails to download.
  • HP BIOS download error
    3 Posts | Last post Mon 11:31 PM
    • Firstly, thanks for the great tool. We're just starting to test it and it will save a LOT of time when fully working. One issue we've got is the BIOS extraction for HP machines.
      
      We've tested a few models so far "HP ProBook 645 G1/G2/G3/G4", "HP EliteBook 820 G1/G2/G3", "HP EliteBook 840 G1" and "HP EliteBook 850 G1" and it downloads the BIOS softpaq successfully, but errors when trying to extract the files. From the log file you can see the switches in use:
      
      Info: Using Hewlett-Packard silent switches: -PDF -FE:\Source Files\Driver Automation Tool\Temp\HPBIOSTemp\ProBook 645 G4 Notebook PC\Extract\ -S -E
      
      which give the error:
      
      Error: Issues occurred during the Hewlett-Packard ProBook 645 G4 Notebook PC extract process
      
      After playing around with the switches I have noticed the following:
      
      You cannot use the -PDF switch and the trailing \ in the extraction path is not supported. Once I remove the -PDF and trailing slash the files extract successfully.
      
      A Dell model download the BIOS and created the package correctly.
      
      Any ideas how to fix this as we have a lot of HP models to add in?
      
      Thanks in advance
      Michael
    • The path also needed enclosing in quotes as it has spaces. If anybody else is having this issue, I've worked around this for the moment by editing DriverAutomationTool.ps1 in the following ways:
      
      Added the below on line 13387. This removes the unsupported switches and encloses the path in quotes to account for spaces in my path:
      
      $HPSilentSwitchesAlt = " -F" + "`"$HPBIOSTemp\Extract`"" + " -S -E"
      
      Copied the extraction code (Line 13435 to 13443) and pasted it into the else condition, so it only tries to run if the original one fails. This then uses the new variable $HPSilentSwitchesAlt for the switches.
      
      Hopefully this helps somebody until a more elegant solution is designed.
      
      Regards
      Michael
    • It also does the above for some of the HP driver packages (HP ProBook 645 G4 and ProBook 640 G5), and again the switches are the problem, as the -PDF switch is not supported.
      
      From line 14165 (needs to be adjusted as I have added code above). I added another variable with the correct switches:
      
      $HPSilentSwitchesAlt = " -F `"" + "$HPTemp`"" + " -S -E"
      
      Then after the extraction, checked if the $HPTemp folder exists. If not, I run the extraction again with the alternate switches.
      
      Hope this helps anyone who has the same problem
      
      Regards
      Michael
      
      if ((Test-Path -Path "$HPTemp") -eq $false)
  • HP SP69540 fails to extract on 6.4.1
    2 Posts | Last post January 17, 2020
    • Hello, want to let the community know i am seeing issues with HP 800 G1 Win 7 drivers. The SP69540.exe is failing to extract. I had a colleague with a different company confirm he is seeing the same issue. I am seeing this in 6.3.1 and 6.4.1. 
      
      ======== DRIVER EXTRACT ISSUE DETECTED ========
      ConfigMgr: Issues occurred while reading extracted drivers
    • I figured out the issue. The driver pack was being downloaded, but for some reason the extraction was failing. After i extracted the drivers and put them in the directory that DAT looks for the extracted driver files, it finished the package. 
1 - 10 of 595 Items