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:
- 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
- After downloading the file (Uses currently logged on users credentials), it extracts it to the Download Folder that you provide
- 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
Execute the following command to download all Driver CAB’s for a specific model:
.\Download-DellDriverPacks.ps1 -DownloadFolder "C:\Downloads" -TargetModel "Latitude E7240" –Verbose
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.
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.
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.
I cant get the download link to work , just gets stuck at Loading…
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) ?
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”
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.
thanks, it is an easy way to download some drivers. And i use a free software to help me.
Is their anyway to download all CAB Files and Extract them ?
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.
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:
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”
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.
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)
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”)]
Thank you Michael for catching this change. I’ve updated the script with the changes.
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
Many thanks for your script. Do you have an updated version to include Windows 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.
I´ve updated the Script to Include Windows 10.
Also some Features like the Expand Switch weren´t working, so i removed them.
I´ve published a post (in German) here:
http://www.ritter-nerd.de/2016/sccm-treiber-datenbank-aufraeumen-teil-1/
But the Script is still in english.
PhiBu
put windows_10_x64 in there 🙂
your link is broken 🙂
The link to the “Dell Driver CAB Downloader Script Thingy” is dead. 😦
Download link for the script on OneDrive is broken.
I updated the URL and tested it. If you still can’t access it let me know and I’ll move it to another source.
Works now, thanks! (Super fast response too, impressive!)