Public/Driver/MyDriverPack.ps1

function Get-MyDriverPack {
    [CmdletBinding()]
    param (
        [string]$Manufacturer = (Get-MyComputerManufacturer -Brief),
        [string]$Product = (Get-MyComputerProduct),
        [ValidateSet('Win10','Win11')]
        [string]$OsCode = 'Win10'
    )
    #=================================================
    # Set ErrorActionPreference
    #=================================================
    $ErrorActionPreference = 'SilentlyContinue'
    #=================================================
    # Action
    #=================================================
    if ($Manufacturer -eq 'Dell') {
        $Result = Get-DellDriverPack | Where-Object {($_.Product -contains $Product)}
        if ($OsCode -eq 'Win10') {
            $Result = $Result | Where-Object {($_.SupportedOperatingSystems -contains 'Windows 10 x64')}
            $Result[0]
        }
        if ($OsCode -eq 'Win11') {
            $Result = $Result | Where-Object {($_.SupportedOperatingSystems -contains 'Windows 11 x64')}
            $Result[0]
        }
    }
    elseif ($Manufacturer -eq 'HP') {
        $Result = Get-HpDriverPack | Where-Object {($_.Product -contains $Product)}
        $Result[0]
    }
    elseif ($Manufacturer -eq 'Lenovo') {
        $Result = Get-LenovoDriverPack | Where-Object {($_.Product -contains $Product)}
        $Result[0]
    }
    elseif ($Manufacturer -eq 'Microsoft') {
        $Result = Get-MicrosoftDriverPack | Where-Object {($_.Product -contains $Product)}
        $Result[0]
    }
    else {
        Write-Warning "$Manufacturer is not supported yet"
    }
    #=================================================
}
function Save-MyDriverPack {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline = $true)]
        [string]$DownloadPath = 'C:\Drivers',
        [switch]$Expand,
        [string]$Manufacturer = (Get-MyComputerManufacturer -Brief),
        [string]$Product = (Get-MyComputerProduct),
        [ValidateSet('Win10','Win11')]
        [string]$OsCode = 'Win10'
    )
    Write-Verbose "Manufacturer: $Manufacturer"
    Write-Verbose "Product: $Product"
    Write-Verbose "OsCode: $OsCode"
    #=================================================
    # Block
    #=================================================
    Block-StandardUser
    Block-WindowsVersionNe10
    #=================================================
    # Get-MyDriverPack
    #=================================================
    $GetMyDriverPack = Get-MyDriverPack -Manufacturer $Manufacturer -Product $Product -OsCode $OsCode

    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

        $GetItemOutFile = Get-Item $OutFile
        $GetMyDriverPack | ConvertTo-Json | Out-File "$OutFile.json" -Encoding ascii -Width 2000 -Force
        #=================================================
        # Expand
        #=================================================
        if ($PSBoundParameters.ContainsKey('Expand')) {

            $ExpandFile = $GetItemOutFile.FullName
            Write-Verbose -Verbose "DriverPack: $ExpandFile"
            #=================================================
            # Cab
            #=================================================
            if ($GetItemOutFile.Extension -eq '.cab') {
                $DestinationPath = Join-Path $GetItemOutFile.Directory $GetItemOutFile.BaseName
    
                if (-NOT (Test-Path "$DestinationPath")) {
                    New-Item $DestinationPath -ItemType Directory -Force -ErrorAction Ignore | Out-Null

                    Write-Verbose -Verbose "Expanding CAB Driver Pack to $DestinationPath"
                    Expand -R "$ExpandFile" -F:* "$DestinationPath" | Out-Null
                }
            }
            #=================================================
            # HP
            #=================================================
            if (($GetItemOutFile.Extension -eq '.exe') -and ($env:SystemDrive -ne 'X:')) {
                if (($GetItemOutFile.VersionInfo.InternalName -match 'hpsoftpaqwrapper') -or ($GetItemOutFile.VersionInfo.OriginalFilename -match 'hpsoftpaqwrapper.exe') -or ($GetItemOutFile.VersionInfo.FileDescription -like "HP *")) {
                    Write-Verbose -Verbose "FileDescription: $($GetItemOutFile.VersionInfo.FileDescription)"
                    Write-Verbose -Verbose "InternalName: $($GetItemOutFile.VersionInfo.InternalName)"
                    Write-Verbose -Verbose "OriginalFilename: $($GetItemOutFile.VersionInfo.OriginalFilename)"
                    Write-Verbose -Verbose "ProductVersion: $($GetItemOutFile.VersionInfo.ProductVersion)"
                    
                    $DestinationPath = Join-Path $GetItemOutFile.Directory $GetItemOutFile.BaseName

                    if (-NOT (Test-Path "$DestinationPath")) {
                        Write-Verbose -Verbose "Expanding HP Driver Pack to $DestinationPath"
                        Start-Process -FilePath $ExpandFile -ArgumentList "/s /e /f `"$DestinationPath`"" -Wait
                    }
                }
            }
            #=================================================
            # Lenovo
            #=================================================
            if (($GetItemOutFile.Extension -eq '.exe') -and ($env:SystemDrive -ne 'X:')) {
                if ($GetItemOutFile.VersionInfo.FileDescription -match 'Lenovo') {
                    Write-Verbose -Verbose "FileDescription: $($GetItemOutFile.VersionInfo.FileDescription)"
                    Write-Verbose -Verbose "ProductVersion: $($GetItemOutFile.VersionInfo.ProductVersion)"

                    $DestinationPath = Join-Path $GetItemOutFile.Directory 'SCCM'

                    if (-NOT (Test-Path "$DestinationPath")) {
                        Write-Verbose -Verbose "Expanding Lenovo Driver Pack to $DestinationPath"
                        Start-Process -FilePath $ExpandFile -ArgumentList "/SILENT /SUPPRESSMSGBOXES" -Wait
                    }
                }
            }
            #=================================================
            # MSI
            #=================================================
            if (($GetItemOutFile.Extension -eq '.msi') -and ($env:SystemDrive -ne 'X:')) {
                $DestinationPath = Join-Path $GetItemOutFile.Directory $GetItemOutFile.BaseName

                if (-NOT (Test-Path "$DestinationPath")) {
                    #Need to sort out what to do here
                }
            }
            #=================================================
            # Zip
            #=================================================
            if ($GetItemOutFile.Extension -eq '.zip') {
                $DestinationPath = Join-Path $GetItemOutFile.Directory $GetItemOutFile.BaseName

                if (-NOT (Test-Path "$DestinationPath")) {
                    Write-Verbose -Verbose "Expanding ZIP Driver Pack to $DestinationPath"
                    Expand-Archive -Path $ExpandFile -DestinationPath $DestinationPath -Force
                }
            }
            #=================================================
            # Everything Else
            #=================================================
            #Write-Warning "Unable to expand $ExpandFile"
        }
        #=================================================
        # Enable-SpecializeDriverPack
        #=================================================
<# if ($env:SystemDrive -eq 'X:') {
            Enable-SpecializeDriverPack
        } #>

        #=================================================
    }
}