Downloading Dell Driver CAB files automagically with the Driver Pack Catalog

Dell has been hard at work behind the scenes trying to make our lives as IT Pros easier.  From their Enterprise Client Tools such as OMCI and the Client Configuration Toolkit (CCTK) to the more recent (past few years) Driver CAB files.  Well yesterday we got another tool to help us in the fight to manage our drivers and ease the pain of obtaining them.  Yesterday Dell unleashed the Dell Driver Pack Catalog.

What is the Dell Driver Pack Catalog you ask?  Warren Byle (Dell) sums it up nicely:

                The Driver Pack Catalog is an XML file containing metadata about the  new Dell systems and WinPE Driver Packs. This XML file is compressed as a Microsoft Cabinet (.CAB) file and digitally signed for delivering it to the customers over the internet.

Basically, it gives is a structured way of identifying the latest and greatest driver packages (CABs) available from Dell.  And with that, I’m here to introduce a new companion script that should give you a jumpstart.

I call it the Dell Driver CAB Downloader Script Thingy (Ok, I’m still working on a name).  You can get the script from here.

What It Does

It’s pretty simple really. You supply the script with some input parameters such as the Model and/or Operating System you would like to download driver packages for, and it does the rest.

First things first let’s explain the general flow of the script once executed:

  1. The script will connect out to Dell’s HTTP download site and download the latest CAB file. NOTE: You have an option to supply a local file if you wish
  2. After downloading the file (Uses currently logged on users credentials), it extracts it to the Download Folder that you provide
  3. Next we consume the extracted XML file and begin searching thru all listed Driver Packages for a match (Model and/or Operating System)

Examples

Execute the following command to download a single WinPE Driver CAB:

.\Download-DellDriverPacks.ps1 –DownloadFolder “C:\Downloads” –TargetOS 32-Bit_-_WinPE_3.0 –Verbose -DontWaitForDownload

WinPE

Execute the following command to download all Driver CAB’s for a specific model:

.\Download-DellDriverPacks.ps1 -DownloadFolder "C:\Downloads" -TargetModel "Latitude E7240" –Verbose

ModelTarget

Closing Thoughts

The introduction of this new Driver Pack Catalog brings with it a new set of possibilities for Driver Management.  While the script I’ve outlined here only solves a small piece of the puzzle, my hope is that it will lay the groudwork for some great tools to provide an end-to-end solution of Downloading, Importing and Distributing drivers for Dell systems.

Author: dhedges

I'm a Senior Client Systems Engineer specializing in OS Deployments and Automation using VBScript, PowerShell, MDT and SCCM. I enjoy working with technology and bending it to my will.

29 thoughts on “Downloading Dell Driver CAB files automagically with the Driver Pack Catalog”

  1. I was curious if you have found a way to use this script to download all the drivers from a list of machines. Like most enterprise associates we have more then 1 dell model and it would be cool to have something like a CSV with all my model types and then have this script parse the CSV and download those models in a clean folder structure.

    1. The script itself can be used like a cmdlet actually. Here’s a sample way of using it.

      “OptiPlex 960″,”OptiPlex 980”, “OptiPlex 990”, “OptiPlex 9010”, “OptiPlex 9010 AIO”,”OptiPlex 9020″,”OptiPlex 9020 AIO”, “Precision WorkStation T5500”, “Precision T5600″,”Precision T5610” | ForEach{
      .\Download-DellDriverPacks.ps1 -DownloadFolder “E:\Drivers\2014.05.08” -TargetOS Windows_7_64-bit -TargetModel $_ -Verbose
      }

      Create your array of models (however you want) and pipe them into a ForEach loop. CAUTION!!! The DontWaitForDownload switch won’t work properly in this situation as Dell limits the number of simultaneous downloads to 3 so you’ll end up seeing a bunch of failures.

  2. Hi, I tried to use the expand command but it gave me a error

    You cannot call a method on a null-valued expression.
    At C:\temp\Download-DellDriverPacks.ps1:269 char:8
    + $destinationFolder.CopyHere($sourceFile)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Another think can I install the drivers using “for /f %%i in (‘dir /b /s *.inf’) do pnputil.exe -i -a %%i” ( using cmd) ?

  3. Thanks for the script.

    I tried to download “Latitude E6420” but the script just exits and no file are downloaded

    PS C:\temp> .\Download-DellDriverPacks.ps1 -DownloadFolder “C:\temp” -TargetModel “Latitude E6420” -TargetOS Windows_8_64-bit -Verbose -Expand
    VERBOSE: Performing the operation “Remove File” on target “C:\temp\DriverPackCatalog.cab”.
    VERBOSE: Performing the operation “Remove File” on target “C:\temp\DriverPackCatalog.xml”.
    VERBOSE: Downloading Catalog: http://downloads.dell.com/catalog/DriverPackCatalog.cab
    VERBOSE: Extracting Catalog XML to C:\temp
    VERBOSE: Target Model: Latitude E6420
    VERBOSE: Target Operating System: Windows_8_64-bit
    VERBOSE: Importing Catalog XML
    VERBOSE: Catalog Version: 2014.10.01
    VERBOSE: Begin Processing Driver Packages
    VERBOSE: Finished Processing Dell Driver Catalog
    VERBOSE: Downloads will execute in the background and may take some time to finish

    I checked the list on Dells webpage and I can find a cab file “E6420-win8-A03-0D34V”

    1. Dell has started to remove a lot of their Windows 8 (RTM) drivers since Microsoft is planning to drop support sooner rather than later in favor of Windows 8.1. That’s likely why it can’t find it.

    1. You could edit the script to do it, but you would be pulling every cab for every OS supported. I don’t know anyone (besides Dell IT) that would need that functionality.

  4. The script errors when there are multiple “SupportedSystems” for 1 cab file (for example: latitude e5430). It set’s brand model to “Latitude Latitude E5430 E5430”, which doesn’t match the target model.

    The DriverPackCatalog.xml part which causes the problem:

  5. Update: I ‘solved’ it by checking if there is more than 1 supported system, and if there is, it just takes the first one (as they all point to the same drivers anyway):

    if ($DriverPackage.SupportedSystems)
    {
    if (!$DriverPackage.SupportedSystems.Brand.Display.count)
    {
    $Brand = $DriverPackage.SupportedSystems.Brand.Display.’#cdata-section’.Trim()
    $Model = $DriverPackage.SupportedSystems.Brand.Model.Display.’#cdata-section’.Trim()
    }
    else
    {
    $Brand = $DriverPackage.SupportedSystems.Brand.Display[0].’#cdata-section’.Trim()
    $Model = $DriverPackage.SupportedSystems.Brand.Model.Display[0].’#cdata-section’.Trim()
    }
    }

    Second notice: the OS select doesn’t work anymore.
    The string to find an OS is like “Windows 7 x64″ instead of Windows 7 64-bit”

  6. Last update: Expand doesn’t work either. The destinationfolder doesn’t exist yet, so it gives a null pointer error. If you make the folder first, it works.

  7. Really the last one:
    If (“$Brand $Model” -like “$TargetModel*”) works better. The original command gives issues for cabs that are for models like “Latitude E????/????” like “Latitude E7450/7450” (if I remember correctly)

  8. If anyone’s trying to use this and not getting the packages to download, the catalog XML has changed recently, and the ValidateSet section for the TargetOS param needs to be changed to

    [ValidateSet(“Windows_PE_3.0_x86”, “Windows_PE_3.0_x64”, “Windows_PE_4.0_x86”, “Windows_PE_4.0_x64”, “Windows_PE_5.0_x86”, “Windows_PE_5.0_x64”, “Windows_Vista_x64”, “Windows_Vista_x64”, “Windows_XP”, “Windows_7_x86”, “Windows_7_x64”, “Windows_8_x86”, “Windows_8_x64”, “Windows_8.1_x86”, “Windows_8.1_x64”)]

  9. I continually get an error message, wondering if you have any idea why

    Exception calling “DownloadFile” with “2” argument(s): “An exception occurred during a WebClient request.”
    At E:\SCCM\Scripts\Download-DellDriverPacks.ps1:254 char:6
    + $wc.DownloadFile($DriverPackageDownloadPath, “$DownloadDestination\$DriverP …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

  10. Is there a way to target family drivers with the script? I use imageassist and have a network share with CABS that i would like to keep updated.

Leave a reply to Marc Cancel reply