Public/DriverPack/Save-MyDriverPack.ps1

function Save-MyDriverPack {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline = $true)]
        [string]$DownloadPath = 'C:\Drivers',
        [switch]$Expand,
        [ValidateSet('Dell','HP','Lenovo')]
        [string]$Manufacturer = (Get-MyComputerManufacturer -Brief),
        [string]$Product = (Get-MyComputerProduct)
    )
    #=======================================================================
    # Block
    #=======================================================================
    Block-StandardUser
    Block-WindowsVersionNe10
    #=======================================================================
    # Get-MyDriverPack
    #=======================================================================
    $GetMyDriverPack = Get-MyDriverPack -Manufacturer $Manufacturer -Product $Product

    if ($GetMyDriverPack) {
        $GetMyDriverPack

        $DriverPackModel = $GetMyDriverPack.Model
        $DriverPackUrl = $GetMyDriverPack.DriverPackUrl
        $DriverPackFile = $DriverPackUrl | Split-Path -Leaf

        $Source = $DriverPackUrl
        $Destination = $DownloadPath
        $OutFile = Join-Path $Destination $DriverPackFile
        #=======================================================================
        # Save-WebFile
        #=======================================================================
        if (-NOT (Test-Path "$Destination")) {
            New-Item $Destination -ItemType Directory -Force -ErrorAction Stop | Out-Null
        }

        Write-Verbose -Verbose "Source: $Source"
        Write-Verbose -Verbose "Destination: $Destination"
        Write-Verbose -Verbose "OutFile: $OutFile"
        
        Save-WebFile -SourceUrl $DriverPackUrl -DestinationDirectory $DownloadPath -DestinationName $DriverPackFile
#=======================================================================
# Set-DriverUnattend
#=======================================================================
#https://docs.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/microsoft-windows-deployment-runsynchronous
#https://docs.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/microsoft-windows-pnpcustomizationsnonwinpe-driverpaths-pathandcredentials
$DriverUnattend = @'
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>1</Order>
                    <Description>OSDCloud Drivers</Description>
                    <Path>C:\Windows\Setup\Scripts\Drivers.cmd</Path>
                </RunSynchronousCommand>
            </RunSynchronous>
        </component>
    </settings>
</unattend>
'@

        #=======================================================================
        # Expand
        #=======================================================================
        if (Test-Path $OutFile) {
            $GetItemOutFile = Get-Item $OutFile

            if ($PSBoundParameters.ContainsKey('Expand')) {
                if (($env:SystemDrive -eq 'X:') -and ($DownloadPath -eq 'C:\Drivers')) {
                    #=======================================================================
                    # Set-DriverUnattend
                    #=======================================================================
                    if (-NOT (Test-Path 'C:\Windows\Panther')) {
                        New-Item -Path 'C:\Windows\Panther'-ItemType Directory -Force -ErrorAction Stop | Out-Null
                    }
                    if (-NOT (Test-Path 'C:\Windows\Setup\Scripts')) {
                        New-Item -Path 'C:\Windows\Setup\Scripts' -ItemType Directory -Force -ErrorAction Stop | Out-Null
                    }
                    New-Item -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Force
                    Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "@echo off" -Encoding ascii -Force
                    Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "echo OSDCloud C:\Windows\Setup\Scripts\Drivers.cmd" -Encoding ascii -Force
                    Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "@echo on" -Encoding ascii -Force

                    Write-Verbose -Verbose "Setting Driver Unattend at C:\Windows\Panther\Unattend.xml"
                    $DriverUnattend | Out-File -FilePath 'C:\Windows\Panther\Unattend.xml' -Encoding utf8
                    #=======================================================================
                }
                #=======================================================================
                # Dell
                #=======================================================================
                if ($Manufacturer -match 'Dell') {
                    $ExpandPath = Join-Path $Destination $DriverPackModel
                    Write-Verbose -Verbose "Expanding $DriverPackFile to $ExpandPath"

                    if (Test-Path "$ExpandPath") {
                        Write-Verbose -Verbose "Removing existing $ExpandPath"
                        Remove-Item -Path $ExpandPath -Force -Recurse | Out-Null
                    }

                    if (-NOT (Test-Path "$ExpandPath")) {
                        New-Item $ExpandPath -ItemType Directory -Force -ErrorAction Stop | Out-Null
                    }
                    
                    Expand -R "$($GetItemOutFile.FullName)" -F:* "$ExpandPath" | Out-Null
                }
                #=======================================================================
                # HP
                #=======================================================================
                elseif ($Manufacturer -match 'HP') {
                    $ExpandPath = Join-Path $Destination $GetItemOutFile.BaseName

                    if (Test-Path "$ExpandPath") {
                        Write-Verbose -Verbose "Removing existing $ExpandPath"
                        Remove-Item -Path $ExpandPath -Force -Recurse | Out-Null
                    }

                    if (($env:SystemDrive -eq 'X:') -and ($DownloadPath -eq 'C:\Drivers')) {
                        Write-Warning "HP made the stupid decision to compress their Drivers in an EXE"
                        Write-Warning "Unfortunately the EXE requires a 32-Bit subsystem"
                        Write-Warning "At least they made it ZIP compatible, unlike Lenovo"
                        Write-Warning "i.e. The Driver will be installed in the Specialize Phase of Windows Setup"
                        Start-Sleep -Seconds 5
                        Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "`"$($GetItemOutFile.FullName)`" /s /e /f `"$ExpandPath`"" -Encoding ascii -Force
                    }
                    else {
                        Write-Verbose -Verbose "Expanding $DriverPackFile to $ExpandPath"
                        Start-Process -FilePath $GetItemOutFile.FullName -ArgumentList "/s /e /f `"$ExpandPath`"" -Wait
                    }
                }
                #=======================================================================
                # Lenovo
                #=======================================================================
                elseif ($Manufacturer -match 'Lenovo') {
                    $ExpandPath = Join-Path $Destination 'SCCM'

                    if (Test-Path "$ExpandPath") {
                        Write-Verbose -Verbose "Removing existing $ExpandPath"
                        Remove-Item -Path $ExpandPath -Force -Recurse | Out-Null
                    }

                    if (($env:SystemDrive -eq 'X:') -and ($DownloadPath -eq 'C:\Drivers')) {
                        Write-Warning "Lenovo made the stupid decision to compress their Drivers in an EXE"
                        Write-Warning "The EXE is compressed with Inno Setup, which requires a 32-Bit subsystem"
                        Write-Warning "i.e. The Driver will be installed in the Specialize Phase of Windows Setup"
                        Start-Sleep -Seconds 5
                        Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "`"$($GetItemOutFile.FullName)`" /SILENT /SUPPRESSMSGBOXES" -Encoding ascii -Force
                    }
                    else {
                        Write-Verbose -Verbose "Expanding $DriverPackFile to $ExpandPath"
                        Start-Process -FilePath $GetItemOutFile.FullName -ArgumentList "/SILENT /SUPPRESSMSGBOXES" -Wait
                    }
                }
                #=======================================================================
                # Unknown
                #=======================================================================
                else {
                    Write-Warning "I know you asked me to Expand this Driver Pack, but I'm not sure how"
                    Start-Sleep -Seconds 5
                }
                #=======================================================================
                # WinPE
                #=======================================================================
                if (($env:SystemDrive -eq 'X:') -and ($DownloadPath -eq 'C:\Drivers')) {
                    #https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/pnpunattend
                    Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "reg add `"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\UnattendSettings\PnPUnattend\DriverPaths\1`" /v Path /t REG_SZ /d `"C:\Drivers`"" -Encoding ascii -Force
                    Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "C:\Windows\System32\pnpunattend.exe AuditSystem /L" -Encoding ascii -Force
                    Add-Content -Path 'C:\Windows\Setup\Scripts\Drivers.cmd' -Value "exit 0" -Encoding ascii -Force
                }
            }
        }
        else {
            Write-Warning "Unable to download the Driver Cab"
            $null
        }
    }
}