Public/Get-DellFamilyPack.ps1

<#
.SYNOPSIS
Returns a Dell Family Pack Object
 
.DESCRIPTION
Returns a Dell Family Pack Object
Requires BITS for downloading the Downloads
Requires Internet access for downloading the Downloads
 
.LINK
https://delldriverpack.osdeploy.com/functions/get-dellfamilypack
#>

function Get-DellFamilyPack {
    [CmdletBinding()]
    Param ()

    #===================================================================================================
    # DellFamilyPackContent
    #===================================================================================================
    $Uri = 'http://downloads.delltechcenter.com/DIA/Drivers/'
    try {
        $DellFamilyPackContent = (Invoke-WebRequest $Uri).Content
    }
    catch {
        Write-Error "Could not connect to $Uri" -ErrorAction Stop
    }
    #===================================================================================================
    # DellFamilyPackContent
    #===================================================================================================
    $DellFamilyPackContentByLine = $DellFamilyPackContent.Split("`n")
    #===================================================================================================
    # Filter Content
    #===================================================================================================
    $DellFamilyPackContentFiltered = @()
    foreach ($ContentLine in $DellFamilyPackContentByLine) {
        if ($ContentLine -notmatch 'FILE') {Continue}
        if ($ContentLine -notmatch 'HREF') {Continue}

        $ContentLine = $ContentLine -replace '\s+', ' '

        $DellFamilyPackContentFiltered += $ContentLine
    }
    #===================================================================================================
    # ForEach
    #===================================================================================================
    $DellFamilyPack = foreach ($ContentLine in $DellFamilyPackContentFiltered) {
        $Make = 'Dell'

        if ($ContentLine -match 'Latitude') {$PackLOB = 'Latitude'}
        elseif ($ContentLine -match 'OptiPlex') {$PackLOB = 'OptiPlex'}
        elseif ($ContentLine -match 'Precision') {$PackLOB = 'Precision'}
        elseif ($ContentLine -match 'Venue') {$PackLOB = 'Venue'}
        elseif ($ContentLine -match 'Vostro') {$PackLOB = 'Vostro'}
        elseif ($ContentLine -match 'XPS') {$PackLOB = 'XPS'}
        else {$PackLOB = ''}

        if ($ContentLine -match "Win7") {$DriverOS = 'Win7'}
        if ($ContentLine -match "Win8") {$DriverOS = 'Win8.1'}
        if ($ContentLine -match "Win10") {$DriverOS = 'Win10'}

        $DriverPackFile = ($ContentLine.Split('<>')[4]).Trim()
        $DriverPackLink = $Uri + $DriverPackFile
        $DriverPackSize = (($ContentLine.Split('<>')[6]).Trim()).Split(' ')[2] -replace 'M',''
        $DriverPackSize = [int]$DriverPackSize
        $DriverPackDateRaw = ((($ContentLine.Split('<>')[6]).Trim()).Split(' ')[0,1])
        $DriverPackDate = [datetime]::ParseExact($DriverPackDateRaw, "dd-MMM-yyyy HH:mm", $null)

        $PackFamily = $DriverPackFile.split('_')[1]
        $PackFamily = $PackFamily -replace "$PackLOB"
        $PackFamily = $PackFamily.Trim()
        $PackFamily = $PackFamily.ToUpper()

        $DriverVersion = $DriverPackFile.split('_.')[2]
        $DriverVersion = $DriverVersion.Trim()
        $DriverVersion = $DriverVersion.ToUpper()

        $FileType = $DriverPackFile.split('.')[1]
        $FileType = $FileType.ToLower()

        #===================================================================================================
        # Model
        #===================================================================================================
        $Model = @()
        if ($PackFamily -eq 'M3800') {$Model = 'Precision M3800'}

        if ($PackFamily -eq 'E5') {$Model = 'Latitude 3340'}
        if ($PackFamily -eq 'E6') {$Model = 'Latitude 3150','Latitude 3450','Latitude 3550','Latitude 5250','Latitude 5450','Latitude 5550','Latitude 7250','Latitude 7350','Latitude 7450','Latitude E5250','Latitude E5450','Latitude E5550','Latitude E7250','Latitude E7350','Latitude E7450'}
        if ($PackFamily -eq 'E6XFR') {$Model = 'Latitude 5404','Latitude 7204','Latitude 7404'}
        if ($PackFamily -eq 'E7') {$Model = 'Latitude 3160','Latitude 3460','Latitude 3560'}

        if ($PackFamily -eq 'E8') {$Model = 'Latitude 3350','Latitude 3470','Latitude 3570','Latitude 7370','Latitude E3350','Latitude E5270','Latitude E5470','Latitude E5570','Latitude E7270','Latitude E7470'}
        if ($PackFamily -eq 'E8RUGGED') {$Model = 'Latitude 5414','Latitude 7214','Latitude 7414'}
        if ($PackFamily -eq 'E8TABLET') {$Model = 'Latitude 3379','Latitude 5175','Latitude 5179','Latitude 7275','Latitude E7275'}

        if ($PackFamily -eq 'E9') {$Model = 'Latitude 3180','Latitude 3189','Latitude 3380','Latitude 3480','Latitude 3580','Latitude 5280','Latitude 5289','Latitude 5480','Latitude 5580','Latitude 7380','Latitude 7389''Latitude 7280','Latitude 7480'}
        if ($PackFamily -eq 'E9RUGGED') {$Model = 'Latitude 7212'}
        if ($PackFamily -eq 'E9TABLET') {$Model = 'Latitude 5285','Latitude 7285'}

        if ($PackFamily -eq 'E10') {$Model = 'Latitude 3190','Latitude 3490','Latitude 3590','Latitude 5290','Latitude 5490','Latitude 5590','Latitude 7290','Latitude 7390','Latitude 7490'}
        if ($PackFamily -eq 'E10CFL') {$Model = 'Latitude 5491','Latitude 5495','Latitude 5591'}
        if ($PackFamily -eq 'E10RUGGED') {$Model = 'Latitude 5420','Latitude 5424','Latitude 7424'}
        if ($PackFamily -eq 'E10TABLET') {$Model = 'Latitude 3390'}

        if ($PackFamily -eq 'E11') {$Model = 'Latitude 3300'}
        if ($PackFamily -eq 'E11WHL') {$Model = 'Latitude 3400','Latitude 3500','Latitude 5300','Latitude 5400','Latitude 5500'}
        if ($PackFamily -eq 'E11WHL2') {$Model = 'Latitude 7200','Latitude 7300','Latitude 7400'}
        if ($PackFamily -eq 'E11WHL3301') {$Model = 'Latitude 3301'}
        if ($PackFamily -eq 'E11WHL5x01') {$Model = 'Latitude 5401','Latitude 5501'}
        #===================================================================================================
        # Create Object
        #===================================================================================================
        $ObjectProperties = @{
            LastUpdate          = [datetime] $DriverPackDate
            Superseded          = [bool] $false
            DriverStatus        = [string] ''
            DriverType          = [string] 'Family'

            DriverName          = [string] "$Make $PackLOB $PackFamily $DriverOS $DriverVersion"
            DriverVersion       = [string] $DriverVersion
            PackGroup           = [string] "$PackLOB $PackFamily $DriverOS"
            Make                = [string] $Make
            PackLOB             = [string] $PackLOB
            PackFamily          = [string] $PackFamily
            Model               = [string[]] $Model
            DriverOS            = [string] $DriverOS
            FileType            = [string] $FileType
            SizeMB              = [int] $DriverPackSize
            DriverUrl           = [string] $DriverPackLink
            DownloadFileName    = [string] "$DriverOS`_$PackLOB$PackFamily`_$DriverVersion.$FileType"
        }
        New-Object -TypeName PSObject -Property $ObjectProperties
    }
    #===================================================================================================
    # Supersedence
    #===================================================================================================
    $DellFamilyPack = $DellFamilyPack | Select-Object LastUpdate, Superseded, DriverStatus, DriverType, DriverName, DriverVersion, PackGroup, Make, PackLOB, PackFamily, Model, DriverOS, FileType, SizeMB,`
    DriverUrl, DownloadFileName | Sort-Object DriverName -Descending

    $CurrentDellFamilyPack = @()
    foreach ($FamilyPack in $DellFamilyPack) {
        if ($CurrentDellFamilyPack.PackGroup -match $FamilyPack.PackGroup) {
            $FamilyPack.Superseded = $true
        } else { 
            $CurrentDellFamilyPack += $FamilyPack
        }
    }
    $DellFamilyPack = $DellFamilyPack | Where-Object {$_.Superseded -eq $false}
    #===================================================================================================
    # Sort
    #===================================================================================================
    $DellFamilyPack = $DellFamilyPack | Sort-Object LastUpdate -Descending
    #===================================================================================================
    # Return
    #===================================================================================================
    Return $DellFamilyPack
    #===================================================================================================
}