Dell Driver Automation Tool

PLEASE NOTE: Some of the details and features in this post have been superseded. Please review our Modern Driver Management and Modern BIOS Management solutions for up to date information.

DeployEverything Dell Driver Download Automation Tool

Our previously created Dell Download PowerShell script has been wrapped into a GUI and provides additional functionality that you requested, including the ability to manually select the models you wish to download drivers/bios updates for.

The tool automates the following processes;

  1. Query SCCM for a full list of Dell enterprise client products (Optiplex & Latitude) or Import CSV file containing your Dell models for MDT 
  2. Download BIOS updates for each model
  3. Creates a PowerShell Script for the BIOS update
    This allows you to deploy a package in SCCM with a program entry pointing to the PS script. As the PS script is updated with each version, you never need to worry about updating this.
  4. Create a BIOS Update Package based on machine mode
  5. Download Driver CAB for each model
  6. Extract the Driver CAB
  7. Import the drivers in the extracted CAB folder
  8. Create a Category based on the machine model
  9. Create a Driver Package based on the machine model and filename
  10. Imports the associated drivers into the newly created Driver Package

The job progress log window will automatically scroll at each step of the process and provide feedback.

Validation Error Screenshot
Job Complete Screenshot

Microsoft Script Library Link –

How To Run The Script

Launch the script from an administrative PowerShell window using an account with rights to your SCCM site server (if using the SCCM query option).

If you are using the tool for SCCM, the script will use the current machine name as the SCCM site server name, if this is run on a different machine delete this and type in your site server name. Clicking on Find Models will then query SCCM and return a list of Dell Products for you to select.

If you are an MDT house and wish to import a CSV containing a list of models, simply create a CSV with a single column and header row listed as “Model”, example below:

Things To Note

  1. Downloads are transferred via Bits and require direct internet access. If you require access via a proxy please provide this feedback and we will add this into a later release.
  2. Background jobs and multi threading are not yet in this release. If you require this functionality for now you can use the PS script on our earlier post –
  3. Import driver jobs can take considerable time, this is the same for OEM tools but something to be aware of as the GUI remains static during this process at present. If you are downloading drivers for multiple models you might wish to run this overnight.
  4. Jobs for “Both” and “MDT” are restricted to “Drivers” only.

Change Log

Version 1.0 – Initial release
Version 1.1 – Changed style to tabs and added drop down list for selecting unknown models from the full Dell Optiplex, Latitude and Precision model list.
Added fix up logic for model AIO, 2-in-1 and other non-standard models when downloading SCCM driver
Version 1.2 – Bug fixes
Version 1.3 – Log File Creation (Created in %temp%\DeployEverythingDellLog.txt)
Version 1.4 – Proxy Server Settings Added
Version 1.5 – Added XPS Models As Requested
Version 1.6 – MDT Import Fix
Version 1.7 – Proxy Server Settings Changed to use NTLM where possible. Added download KB and percentage progress for driver pack downloads.
Version 1.8 – Added Driver Import INF Updates for SCCM Import Process
Version 1.9 – Added Download Only Option

New Feature : Full Dell Optiplex, Latitude & Precision listings

Added logic to cater for special models eg. “Rugged” when downloading SCCM Driver Packages

New Feature: Proxy Server Support


Please pass any feedback on this tool to [email protected]

Driver Packages – Post Script Run
Driver Package Contents


MDT Drivers Post Script Run

Driver Download Folders

BIOS Update & PowerShell Update Script
Model Folder – Sub-Folders created for BIOS, Driver Cab and Extracted Drivers (Dell Revision Number)
Driver Cab Folder

Maurice Daly

Maurice has been working in the IT industry for the past 20 years and currently working in the role of Senior Cloud Architect with CloudWay. With a focus on OS deployment through SCCM/MDT, group policies, active directory, virtualisation and office 365, Maurice has been a Windows Server MCSE since 2008 and was awarded Enterprise Mobility MVP in March 2017. Most recently his focus has been on automation of deployment tasks, creating and sharing PowerShell scripts and other content to help others streamline their deployment processes.


  • Hi Maurice,

    Your work seems great and promising, I would like to ask though, now that the drivers in “Microsoft Update Catalog (MUC)” are very stable, wouldn’t be better -or an option in your script- to select them instead the vendor’s ones?
    I’m asking this because usually the vendor’s site has quite older versions from the ones MUC is hosting.
    In my last Windows 10 deployment project I haven’t used the vendor’s drivers (Lenovo) instead I opted for the ones I got from MUC by diligently searching for the hardware IDs in order to get the correct driver ranking -which as you are surely aware is our main pain when dealing with drivers, I had some “Dohhhh” occasions throughout the deployment of Win10 and it is not something I would like to deal every day with-.
    Regarding the bios update, there are some gotchas for every vendor, with Lenovo I had to be very careful because after the bios update I wanted to apply the capture settings in it, but the captured settings are version specific and this requires extra handling and work beforehand.
    If you could chime in and provide your thoughts about using MUC drivers instead of the vendor’s it would be great!

    With regards.

    • Hi George,

      This is a good point to debate. For years engineers have been told by OEM manufacturers to use their driver packages, even though the drivers are often significantly older than the component manufacturers drivers. The reason that OEM’s suggest this is for stability purposes, as they validate drivers on large quantities of test machines. So for the most part I would still recommend that the OEM drivers are applied where they are relatively current. The exception to the rule of course is when OEM providers stop updating driver packages for what they deem to be “legacy” hardware. In this instance pulling down drivers from the MUC or the component manufacturer is the only option. Future builds of the Driver Automation Tool might well include MUC download options to cater for this, the first step is an update later this week that will allow you to create custom driver packages based on downloaded content.


  • Thanks for sharing such an awesome tool!
    I’m running into an issue getting the MDT import to work correctly. The download works fine, and the categories are created correctly in MDT, but the actual import of the CAB into MDT seems to not take place. The script is showing proper completion/success (no error messages). But the processes finishes WAY too fast to actually do the import and of course when viewing the MDT categories, they are empty.
    Is there any additional log I can check to see what’s happening?

  • Hi Maurice, Another bug the categories name include comma and are not supported.
    Maybe use a dash instead of commas.

  • Hi Maurice,

    When not running from the site server, nothing actually downloads but the driver package is created. I can troubleshoots it if it’s not a known issue. It might just be my machine/OS server 2016

  • This tool is awesome! Im sure Im just not quite doing something right, but it is creating the folder structure on the shares, but nothing gets imported into SCCM and there are no errors. I have full Administrator rights. Any ideas?

    • Hi Brad are you using a proxy? I’ve seen a couple of instances where bits jobs are timing out via the proxy. I was going to add in error checking for this in the next update.

      • No proxy. All of the cab files are being downloaded and extracted. It creates the “Package”folder, but doesnt do anything within SCCM. We have a CAS, does that matter?

      • We rebooted the server and it looks like it is coming in now! Thank you so much for such a great tool!

      • Ha.. when in doubt, plug it out.. Good to hear everything is working now. You’re more than welcome for the script, I figure if it helps me, it will help others.

  • Hi Maurice,

    Very cool tool you have build.

    Just tried to use it to import BIOS update for Latitude 5480, but got the dock FW instead: “DellDockingStationFwUp_1.0.0.8_20161220_WD15.exe”

    Looks like something needs to be corrected, as the correct file would have been:


    • Hi Jesper,

      I had a look at this and found that the older model Latitude BIOS links differ from the more recent ones. When selecting the latest BIOS link from the page it uses two terms, *BIOS* and *Windows* to download the latest BIOS update for Microsoft Windows. The issue is that in your example the most recent BIOS link is structured as below;

      outerHTML :
      tagName : A
      HREF : /FOLDER04148724M/1/Latitude_5X80_Precision_3520_1.1.1.exe

      So could you please modify the following line of the script as per the below;

      $BIOSDownload = (Invoke-WebRequest -Uri $ModelURL -UseBasicParsing).Links | Where-Object { ($_.outerHTML -like “*BIOS*”) -and ($_.outerHTML -like “*WINDOWS*”) } | select -First 1


      $BIOSDownload = (Invoke-WebRequest -Uri $ModelURL -UseBasicParsing).Links | Where-Object { $_.outerHTML -like “*BIOS*EXE*”} | select -First 1

      Ultimately I might need to put a condition to check for the word “Windows” also to avoid any Linux BIOS packages that might be on the site, but if you could test that and let me know how you get on.

      • Hi Maurice, thanks for this great script. In regards to that update to look for *Windows* it looks like that causes a few models to not grab the latest BIOS. Example is the Optiplex 760 as the latest BIOS A16 titles the download as “Flash BIOS Executable” while the A12 and older use “CPG BIOS Executable for Windows/DOS”.

      • Hi Jake. It sounds like a bug that was in it before due to posts within the comments which I corrected. I’ll have a look later on.

  • Hi Maurice,

    this is a really nice tool, thx for sharing!!!

    Could you please add the ability to use it with a proxy? Also, not sure if it’s already there, but if not I think it could be nice to output the log from the GUI to a folder?

    Simon B.

    • Hi George,

      You could specify a password in the PowerShell scripts created during the process. If you add -p:PASSWORD to the end of the following line;
      $BIOSSwitches=” -noreboot -nopause ”

      In my environment however I blank out the password in the BIOS using CCTK prior to the bios update, then inject the password back into the BIOS in a follow up step.

  • Hi THanks for the tool. Is it also possible to use the tool without sccm. Only for MDT? Or do i need sccm. My download button is stil greyed out.

    • Yes it is possible to use the tool standalone with MDT. As for the download button, this only becomes enabled once you select a CSV to import containing your model lists.

      • Hi, I’m trying to use your tool for MDT as well. Importing a CSV file doesn’t populate the list. Am I missing something?

      • Hi Patrick,

        Sorry about that, I had moved some functions around in the proxy update and forgot to update the MDT section. The code has been updated, version 1.6 is up on the MS Script Library now and resolves the issue.


      • Thanks for the quick response Maurice. The list is populating now and I was able to launch a Download. I see that a Latitude E6440 Folder along with a Driver Cab sub-folder were created. The .tmp file size in it has not increased for the past 2o minutes. Also, the GUI progress bar is not moving. I think the process is frozen somewhere. The file is a little over 832MB.
        Question: Is it supposed to take that long, and should it automatically import drivers into my MDT once done?
        FYI: Manually entering proxy and ID info doesn’t work, but not specifying any seems to work. Our IE configuration is using a pac file.

      • Hi Patrick it sounds like the bits job has timed out on your proxy. Try starting it again, I am going to add in more checks in the bits job in the next release.

        In regards to importing into MDT, once the file is downloaded it will import the CAB file directly into MDT. It can take a while to do this, the process would be the same via the MDT console though. The speed of the download is also dependant on your BITS settings deployed via GPO.

        I’ve tested the script through a McAfee web gateway with no issue but there are a lot of different configurations so it could be something as simple as your username formatting etc. It’s hard to test for every eventuality but again I’ll add further logic into the next release.

      • One last thing Maurice. Is there a way to stop the script before it imports into MDT, or at least to configure it to imports using my custom MDT folder structure? I’m concerned about letting a script touch our Deployment Share!! Also, looking forward to the Lenovo version since most of our new systems are now Lenovo.

      • The script is designed to automate the entire process so there isn’t an opt out as such. You could edit the script to suit your naming convention, the one coded in the script uses OSMakeModelRevision as per the screenshots on the blog. Look over the MDT sections on the script and you’ll see clearly what it is doing, I understand your concerns though.

  • Hi Maurice is there still a permissions issue as I have downloaded today and getting the same error when trying to connect through to the site server with a valid account

  • When I try to run DellAutoDownloadGUI.ps1 I receive this:

    You must provide a value expression on the right-hand side of the ‘-‘ operator.
    At C:DeployEverything Dell Driver Download Automation Tool For SCCMDellAutoDownloadGUI.ps1:749 char:18
    + if ($Model – <<<< notin $DellProducts)
    + CategoryInfo : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : ExpectedValueExpression

  • Awesome work! Thank you for sharing with everyone. Quick question- Latitude and Optiplex only? Dell Precision desktops will be excluded?

  • looking really good. what does this look like in the sccm driver store? we move all drivers in the driver store to respective folders for example DellE7470 x64chipset ,  DellE7470 x64Nic , ect…

    Also the dell cabs have much bloat and drivers for hardware variation that we would not add to out driver store to save storage on our DP’s.

    Would it be possible to run this tool on a reference model instead of using the CSV to interrogate the local hardware ID’s and only inject the discrete drivers need?

    • Hi Mark,

      If you scroll down the post you will see the driver packs as they look in the console. The packs are created in the following format MODEL – OPERATING SYSTEM – ARCHITECTURE. As for the individual drivers in the driver store, they are added to the root store and given categories in the following format – MODEL – DRIVER REVISION. It could be easily tailored however to create / store drivers in sub-folders.

      Unfortunately your use case scenario was not really what this tool was intended for.


    • The real problem here is finding a way to interrogate manufacturer websites to achieve this. So far Acer is the only other manufacturer I have found that have websites which can be parsed to get links to the driver downloads. In their case the exe files can be extracted and imported. If manufacturers had a standard driver pack response file available then a multi manufacturer tool would be easy to build.

  • Very interesting program…. When I point it at our site server and click on Find Models it returns an “Error: No Dell Client Models Found. Please check the Site Server name and ensure you have sufficient rights.” I’m running this from my workstation using my credentials that has rights to the site server.

    • Hi Michael. The script has been corrected and should now read the WMI of the site server specified, please make sure the account you are running the PS script as has rights to the site server when running.

      • Hi Maurice is this still an issue as I have downloaded today and getting the same error

      • Adrian,

        Apologies. I had corrected the issue in the script previously but didn’t add this into the original build source script. I have just added back in the fix.

        Thanks for spotting that!.


      • Same error message for me too. Version 1.2 Generated on 27/01/2017

      • Hi Martin,

        Could you let me know what happens when you run this on your site server ? – Get-WmiObject -ComputerName YOURSERVERNAME -Namespace “rootSMSsite_YOURSITECODE” -Class SMS_G_System_COMPUTER_SYSTEM | Select-Object -Property Model | Where-Object { ($_.Model -like “*Optiplex*”) -or ($_.Model -like “*Latitude*”) -or ($_.Model -like “*Precision*”) }


      • I get no result at all in powershell. I don’t have any Dell models in my DEV environment. The only model I have is a Surface pro 3. I just want to test your tool and add the models in the list then import everything in SCCM.

      • I think I’ve found the issue in your script. Instead of : “# Add model to ArrayList if not present if ($Models -ne $null)” I changed it to “# Add model to ArrayList if not present if ($Models -eq $null)” Could it be it?

      • Hi Martin,

        This isn’t a bug. The script is designed to connect to SCCM and obtain a list of Dell hardware, if no Dell hardware is found then the “No Models Found” result is shown. In regards to the if ($Models -ne $null) this again is used to determine if there are Dell models when building the array.

        I will be modifying the code to allow for non Dell SCCM environments to download the driver packs in a future build.




Categories use cookies to ensure that we give you the best experience on our website.