SCConfigMgr Driver Automation Tool

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

The tool automates the following processes;

  1. Queries XML content from Dell, Lenovo, HP and Microsoft
  2. Provides Driver downloads for all listed manufacturers
  3. Provides BIOS downloads for Dell, Lenovo or HP systems
  4. Create a BIOS update package
  5. Download driver package file for each model
  6. Extract the drivers contained within
  7. Import the extracted drivers
  8. Create a category based on the machine model
  9. Create a Driver Package based on the machine make, model and version of the extracted drivers
  10. Import the associated drivers into the newly created driver package.  Options allow for either a standard program package or driver package to suit your deployment method 

The script can be run against SCCM, MDT, both SCCM/MDT or as a standalone driver download utility (by popular request). 

Please dont forget to click on the ratings stars to rate this tool and leave feedback. 

PLEASE NOTE

Note that the utility is provided "as is", without warranty or support. Models are subject to availability provided within the manufacturer feeds.

Latest Notes:

6.4.1 - Fixed Lenovo JavaScript / IE parsing issues. Custom creation baseboard issue fixed. Package description shortened to accomodate Lenovo driver packages with high number of SKU values

6.4.0 - UI fixes, content clean up fix, added support for Windows 10 1909, improved MS Surface model detection. Removed support for MS surface firmware only packages. Fixed Dell 2-in-1 driver version issues.
6.3.1 - Fixed issues with SKU value change causing download and packaging issues with HP & Lenovo packages
6.3.0 - Microsoft Surface download logic replaced. Create driver and firmware packages for Surface devices. Bug fixes.
6.2.0 - New installer based deployment. Updates and fixes. Windows 10 1903 support
6.1.7 - Fix: Condition whereby not all selected models are saved within the XML settings file
6.1.6 - Fix: Reset tool form issues resolved

Fix: Logging timezone issues resolved
Fix: Source package clean up issues resolved
Additional checking for MDT and ConfigMgr platforms
Removal of legacy code

6.1.5 HP BIOS download fix
Added move to Windows 10 1809 build in package management
Manufacturer correction for Microsoft custom packages

6.1.4 - Improved GUI response for make and OS selections
Fix for some Dell models not finding the BIOS download link URL
Additional MDT driver path options

6.1.3 - Resolved issue with Bits-Transfer module not loading in Windows Server 2012 R2. TLS now defaults to 1.2 for HTTPS downloads.
6.1.2 - Improved compiled EXE 
Added support for Windows 10 1809 when manufactures support downloads
Microsoft Surface Windows 10 build support
Minor GUI improvements
Improved supersedence of drivers
Added supersedence of BIOS packages

6.1.1 - Fix for Lenovo driver downloads. Fix for custom package creation issue and minor GUI updates for resizing.
6.1.0 - Updated GUI. Model list can now be expanded
Support for Lenovo Windows 10 version driver packages
Added support for third party WinPE imaging through XML based machine for MDM
Added admin controls to hide tabs
Updated driver package name formatting to use Windows 10 version instead of build
Added conversion for Windows 10 packages with version numbeers to build numbers
All download links now use HTTPS
Updated URL for Dell Flash64W utility and changed download matching
Added model count indicator on search page
Added additional GUI feedback during model source downloads 

6.0.9 - HF - HP BIOS download issue fix
6.0.9 - (2018-06-19) - Lenovo model lookup failure fix. Lenovo Windows 10 download matching workaround. Current download will use latest Windows 10 build download link until build numbers are available in the XML. Data grid updates for both Models and Package Management sections to clearer highlight selected values 

6.0.8 - (2018-06-06) - HP SoftPaq packaging code changes. Fix for HP 1803 downloads and catalogue XML issuess. SCCM custom folder code optimisation. Bits enabled by default, can be disabled by setting the option manually and then closing the GUI to commit the save. Additional error handling.
6.0.7 - (2018-05-28) - Fix for HP catalogue XML extract. Added OS build number to custom packages where HP is the make. Removed OS info from BIOS packages
6.0.6 - (2018-04-25) - Windwos 10 Build 1803 support added (HP)
6.0.5 - (2018-04-25) - HP matching logic updated. Custom SCCM console root logic updated
6.0.4 - (2018-04-10) - Fix for Dell system links not being found for some models when downloading BIOS or driver packages. DP & DPG's datagrid will now clear on each detection. Added the ability to provide a custom packages root folder structure or drop all packages into the root folder
6.0.3 - (2018-04-06) - A couple more code tweaks and fixes
6.0.2 - (2018-04-03) - Package storage destination browse button fix. Duplicate DP/DPG fix
6.0.1 - (2018-03-30) Known model fix
6.0.0 (2018-03-29) New Graphical Layout. HP Softpaq Driver Catalog Support. Storage Changes. Find Model / Driver Feature

 

ConfigMgr - Added pilot option for new packages. Added driver state management for production, pilot & retirement   You can move packages between each state within the tool  
MDT  - Added ability to specify alternative MDT PS module location   Added ability to select one or mode MDT deployment shares

Script Example:

 

PowerShell
Edit|Remove
function DellBiosFinder { 
    param ( 
        [string] 
        $Model 
    ) 
     
    if ((Test-Path -Path $global:TempDirectory\$DellCatalogXMLFile-eq $false) { 
        global:Write-CMLogEntry -Value "======== Downloading Dell Driver Catalog  ========" -Severity 1 
        global:Write-CMLogEntry -Value "Info: Downloading Dell Driver Catalog Cabinet File from $DellCatalogSource" -Severity 1 
        # Download Dell Model Cabinet File 
        try { 
            if ($global:ProxySettingsSet -eq $true) { 
                Start-BitsTransfer -Source $DellCatalogSource -Destination $global:TempDirectory @global:BitsProxyOptions 
            } 
            else { 
                Start-BitsTransfer -Source $DellCatalogSource -Destination $global:TempDirectory @global:BitsOptions 
            } 
        } 
        catch { 
            global:Write-CMLogEntry -Value "Error: $($_.Exception.Message)" -Severity 3 
        } 
         
        # Expand Cabinet File 
        global:Write-CMLogEntry -Value "Info: Expanding Dell Driver Pack Cabinet File: $DellCatalogFile" -Severity 1 
        Expand "$global:TempDirectory\$DellCatalogFile" -F:* "$global:TempDirectory\$DellCatalogXMLFile" | Out-Null 
         
    } 
     
    if ($global:DellCatalogXML -eq $null) { 
        # Read XML File 
        global:Write-CMLogEntry -Value "Info: Reading Driver Pack XML File - $global:TempDirectory\$DellCatalogXMLFile" -Severity 1 
        [xml]$global:DellCatalogXML = Get-Content -Path $global:TempDirectory\$DellCatalogXMLFile 
         
        # Set XML Object 
        $global:DellCatalogXML.GetType().FullName 
    } 
     
     
    # Cater for multiple bios version matches and select the most recent 
    $DellBIOSFile = $global:DellCatalogXML.Manifest.SoftwareComponent | Where-Object { 
        ($_.name.display."#cdata-section" -match "BIOS"-and ($_.name.display."#cdata-section" -match "$model") 
    } | Sort-Object ReleaseDate -Descending 
    # Cater for multi model updates 
    if ($DellBIOSFile -eq $null) { 
        $global:DellCatalogXML.Manifest.SoftwareComponent | Where-Object { 
            ($_.name.display."#cdata-section" -match "BIOS"-and ($_.name.display."#cdata-section" -like "*$(($model).Split(' ')[1])*") 
        } | Sort-Object ReleaseDate -Descending 
    } 
    if (($DellBIOSFile -eq $null-or (($DellBIOSFile).Count -gt 1)) { 
        # Attempt to find BIOS link         
        if ($Model -match "AIO") { 
            $DellBIOSFile = $DellBIOSFile | Where-Object { 
                $_.SupportedSystems.Brand.Model.Display.'#cdata-section' -match "AIO" 
            } | Sort-Object ReleaseDate -Descending | Select -First 1 
        } 
        else { 
            $DellBIOSFile = $DellBIOSFile | Where-Object { 
                $_.SupportedSystems.Brand.Model.Display.'#cdata-section' -eq "$($Model.Split(' ')[1])" 
            } | Sort-Object ReleaseDate -Descending | Select -First 1 
        } 
    } 
    elseif ($DellBIOSFile -eq $null) { 
        # Attempt to find BIOS link via Dell model number (V-Pro / Non-V-Pro Condition) 
        $DellBIOSFile = $global:DellCatalogXML.Manifest.SoftwareComponent | Where-Object { 
            ($_.name.display."#cdata-section" -match "BIOS"-and ($_.name.display."#cdata-section" -match "$($model.Split("-")[0])") 
        } | Sort-Object ReleaseDate -Descending | Select -First 1 
    } 
     
    global:Write-CMLogEntry -Value "Info: Found BIOS URL $($DellBIOSFile.Path)" -Severity 1 
    # Return BIOS file values 
    Return $DellBIOSFile 
     
}