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 #=================================================================================================== } |