Private/Get-OSDDriverDellFamily.ps1
<#
.SYNOPSIS Returns a PowerShell Object of the Dell Family Packs .DESCRIPTION Returns a PowerShell Object of the Dell Family Packs by parsing http://downloads.delltechcenter.com/DIA/Drivers/ This function is used with Save-DellFamilyPack .LINK https://osddrivers.osdeploy.com/functions/get-dellfamilypack #> function Get-OSDDriverDellFamily { [CmdletBinding()] param () #=================================================================================================== # Uri #=================================================================================================== #$Uri = 'http://downloads.delltechcenter.com/DIA/Drivers/' $Uri = 'http://downloads.delltechcenter.com/DIA/Drivers/' #=================================================================================================== # DriverWebContentRaw #=================================================================================================== Write-Verbose "OSD: Get Latest Driver Versions $Uri" -Verbose $DriverWebContentRaw = @() try { $DriverWebContentRaw = (Invoke-WebRequest $Uri).RawContent } catch { Write-Error "OSDDrivers uses Internet Explorer to parse the HTML data. Make sure you can open the URL in Internet Explorer and that you dismiss any first run wizards" -ErrorAction Stop } #=================================================================================================== # DriverWebContentByLine #=================================================================================================== $DriverWebContentByLine = @() #$DriverWebContentByLine = [array]$DriverWebContentRaw.Split("`n") try { $DriverWebContentByLine = $DriverWebContentRaw.Split("`n") } catch { Write-Error "Unable to parse $Uri" -ErrorAction Stop } #=================================================================================================== # DriverWebContent #=================================================================================================== $DriverWebContent = @() foreach ($ContentLine in $DriverWebContentByLine) { if ($ContentLine -notmatch 'FILE') {Continue} if ($ContentLine -notmatch 'HREF') {Continue} $ContentLine = $ContentLine -replace '\s+', ' ' $DriverWebContent += $ContentLine } #=================================================================================================== # ForEach #=================================================================================================== $global:GetOSDDriverDellFamily = @() $global:GetOSDDriverDellFamily = foreach ($ContentLine in $DriverWebContent) { #=================================================================================================== # Defaults #=================================================================================================== $OSDVersion = $(Get-Module -Name OSD | Sort-Object Version | Select-Object Version -Last 1).Version $LastUpdate = [datetime] $(Get-Date) $OSDStatus = $null $OSDType = 'FamilyPack' $OSDGroup = 'DellFamily' $DriverName = $null $DriverVersion = $null $DriverReleaseId = $null $DriverGrouping = $null $OperatingSystem = @() $OsVersion = @() $OsArch = @() $OsBuildMax = @() $OsBuildMin = @() $Make = @('Dell') $MakeNe = @() $MakeLike = @() $MakeNotLike = @() $MakeMatch = @() $MakeNotMatch = @() $Generation = $null $SystemFamily = $null $Model = @() $ModelNe = @() $ModelLike = @() $ModelNotLike = @() $Model = @() $ModelNotMatch = @() $SystemSku = @() $SystemSkuNe = @() $DriverBundle = $null $DriverWeight = 100 $DownloadFile = $null $SizeMB = $null $DriverUrl = $null $DriverInfo = $null $DriverDescription = $null $Hash = $null $OSDGuid = $(New-Guid) #=================================================================================================== # DriverFamily #=================================================================================================== if ($ContentLine -match 'Latitude') {$SystemFamily = 'Latitude'} elseif ($ContentLine -match 'OptiPlex') {$SystemFamily = 'OptiPlex'} elseif ($ContentLine -match 'Precision') {$SystemFamily = 'Precision'} elseif ($ContentLine -match 'Venue') {$SystemFamily = 'Venue'} elseif ($ContentLine -match 'Vostro') {$SystemFamily = 'Vostro'} elseif ($ContentLine -match 'XPS') {$SystemFamily = 'XPS'} else {$SystemFamily = ''} #=================================================================================================== # OSNameMatch OsVersion OSVersionMax #=================================================================================================== if ($ContentLine -match "Win7") { $OSNameMatch = 'Win7' $OsVersion = '6.1' $OsArch = 'x64' } if ($ContentLine -match "Win8") { $OSNameMatch = 'Win8.1' $OsVersion = '6.3' $OsArch = 'x64' } if ($ContentLine -match "Win10") { $OSNameMatch = 'Win10' $OsVersion = '10.0' $OsArch = 'x64' } #=================================================================================================== # DriverPackFile #=================================================================================================== $DriverPackFile = ($ContentLine.Split('<>')[4]).Trim() $DriverUrl = $Uri + $DriverPackFile #=================================================================================================== # SizeMB #=================================================================================================== $SizeMB = (($ContentLine.Split('<>')[6]).Trim()).Split(' ')[2] -replace 'M','' $SizeMB = [int]$SizeMB $DriverChild = $DriverPackFile.split('_')[1] $DriverChild = $DriverChild -replace "$SystemFamily" $DriverChild = $DriverChild.Trim() $DriverChild = $DriverChild.ToUpper() $DriverReleaseId = "$SystemFamily $DriverChild" $DriverVersion = $DriverPackFile.split('_.')[2] $DriverVersion = $DriverVersion.Trim() $DriverVersion = $DriverVersion.ToUpper() #=================================================================================================== # Model Latitude #=================================================================================================== if ($DriverReleaseId -match 'Latitude') { $IsLaptop = $true $IsDesktop = $false } if ($DriverReleaseId -eq 'Latitude 3X40') {$Model = 'Latitude 3340','Latitude 3440','Latitude 3540'} if ($DriverReleaseId -eq 'Latitude E1') {$Model = 'Latitude E4200','Latitude E4300','Latitude E5400','Latitude E5500','Latitude E6400','Latitude E6500','Precision M2400','Precision M4400','Precision M6400'} if ($DriverReleaseId -eq 'Latitude E2') {$Model = 'Latitude E4310','Latitude E5410','Latitude E5510','Latitude E6410','Latitude E6510','Precision M2400','Precision M4500','Precision M6500','Latitude Z600'} if ($DriverReleaseId -eq 'Latitude E3') {$Model = 'Latitude 13','Latitude E5420','Latitude E5520','Latitude E6220','Latitude E6320','Latitude E6420','Latitude E6520','Precision M4600','Precision M6600','Latitude XT2'} if ($DriverReleaseId -eq 'Latitude E4') {$Model = 'Precision M4700','Precision M4700'} if ($DriverReleaseId -eq 'Latitude E5') {$Model = 'Latitude E5440','Latitude E5540','Latitude E6440','Latitude E6540','Latitude E7240','Latitude E7440'} if ($DriverReleaseId -eq 'Latitude 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 ($DriverReleaseId -eq 'Latitude E6XFR') {$Model = 'Latitude 5404','Latitude 7204','Latitude 7404'} if ($DriverReleaseId -eq 'Latitude E7') {$Model = 'Latitude 3160','Latitude 3460','Latitude 3560'} if ($DriverReleaseId -eq 'Latitude E8') {$Model = 'Latitude 3350','Latitude 3470','Latitude 3570','Latitude 7370','Latitude E3350','Latitude E5270','Latitude E5470','Latitude E5570','Latitude E7270','Latitude E7470'} if ($DriverReleaseId -eq 'Latitude E8RUGGED') {$Model = 'Latitude 5414','Latitude 7214','Latitude 7414'} if ($DriverReleaseId -eq 'Latitude E8TABLET') {$Model = 'Latitude 3379','Latitude 5175','Latitude 5179','Latitude 7275','Latitude E7275'} if ($DriverReleaseId -eq 'Latitude 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 ($DriverReleaseId -eq 'Latitude E9RUGGED') {$Model = 'Latitude 7212'} if ($DriverReleaseId -eq 'Latitude E9TABLET') {$Model = 'Latitude 5285','Latitude 7285'} if ($DriverReleaseId -eq 'Latitude E10') {$Model = 'Latitude 3190','Latitude 3490','Latitude 3590','Latitude 5290','Latitude 5490','Latitude 5590','Latitude 7290','Latitude 7390','Latitude 7490'} if ($DriverReleaseId -eq 'Latitude E10CFL') {$Model = 'Latitude 5491','Latitude 5495','Latitude 5591'} if ($DriverReleaseId -eq 'Latitude E10RUGGED') {$Model = 'Latitude 5420','Latitude 5424','Latitude 7424'} if ($DriverReleaseId -eq 'Latitude E10TABLET') {$Model = 'Latitude 3390'} if ($DriverReleaseId -eq 'Latitude E11') {$Model = 'Latitude 3300'} if ($DriverReleaseId -eq 'Latitude E11WHL') {$Model = 'Latitude 3400','Latitude 3500','Latitude 5300','Latitude 5400','Latitude 5500'} if ($DriverReleaseId -eq 'Latitude E11WHL2') {$Model = 'Latitude 7200','Latitude 7300','Latitude 7400'} if ($DriverReleaseId -eq 'Latitude E11WHL3301') {$Model = 'Latitude 3301'} if ($DriverReleaseId -eq 'Latitude E11WHL5x01') {$Model = 'Latitude 5401','Latitude 5501'} #=================================================================================================== # Model OptiPlex #=================================================================================================== if ($DriverReleaseId -match 'OptiPlex') { $IsLaptop = $false $IsDesktop = $true } if ($DriverReleaseId -eq 'OptiPlex D1') {$Model = 'OptiPlex 360','OptiPlex 760','OptiPlex 760'} #Win7 if ($DriverReleaseId -eq 'OptiPlex D2') {$Model = 'OptiPlex 380','OptiPlex 780','OptiPlex 980','OptiPlex XE'} #Win7 if ($DriverReleaseId -eq 'OptiPlex D3') {$Model = 'OptiPlex 390','OptiPlex 790','OptiPlex 990'} #Win7 if ($DriverReleaseId -eq 'OptiPlex D4') {$Model = 'OptiPlex 3010','OptiPlex 7010','OptiPlex 9010'} if ($DriverReleaseId -eq 'OptiPlex D5') {$Model = 'OptiPlex 3020','OptiPlex 9020','OptiPlex XE2'} if ($DriverReleaseId -eq 'OptiPlex D6') {$Model = 'OptiPlex 3020M','OptiPlex 3030','OptiPlex 7020','OptiPlex 9020M','OptiPlex 9030'} if ($DriverReleaseId -eq 'OptiPlex D7') {$Model = 'OptiPlex 3040','OptiPlex 3046','OptiPlex 3240','OptiPlex 5040','OptiPlex 7040','OptiPlex 7440'} if ($DriverReleaseId -eq 'OptiPlex D8') {$Model = 'OptiPlex 3050','OptiPlex 5050','OptiPlex 5055','OptiPlex 5250','OptiPlex 7050','OptiPlex 7450'} if ($DriverReleaseId -eq 'OptiPlex D9') {$Model = 'OptiPlex 3060','OptiPlex 5060','OptiPlex 5260','OptiPlex 7060','OptiPlex 7460','OptiPlex 7760','OptiPlex XE3'} if ($DriverReleaseId -eq 'OptiPlex D9MLK') {$Model = 'OptiPlex 3070','OptiPlex 5070','OptiPlex 5270','OptiPlex 7070','OptiPlex 7470','OptiPlex 7770'} if ($DriverReleaseId -eq 'OptiPlex 5055') {$Model = 'OptiPlex 5055'} if ($DriverReleaseId -eq 'OptiPlex 5055R') {$Model = 'OptiPlex 5055R'} #=================================================================================================== # Model Precision M #=================================================================================================== if ($DriverReleaseId -match 'Precision M') { $IsLaptop = $true $IsDesktop = $false } if ($DriverReleaseId -eq 'Precision M3800') {$Model = 'Precision M3800'} if ($DriverReleaseId -eq 'Precision M5') {$Model = 'Precision M2800','Precision M4800','Precision M6800'} if ($DriverReleaseId -eq 'Precision M6') {$Model = 'Precision 3510','Precision 5510','Precision 7510','Precision 7710','XPS*9550'} if ($DriverReleaseId -eq 'Precision M7') {$Model = 'Precision 3520','Precision 5520','Precision 7520','Precision 7720'} if ($DriverReleaseId -eq 'Precision M8') {$Model = 'Precision 3530','Precision 5530','Precision 7530','Precision 7730'} if ($DriverReleaseId -eq 'Precision M8WHL') {$Model = 'Precision 3540'} if ($DriverReleaseId -eq 'Precision M9') {$Model = 'Precision 3541'} if ($DriverReleaseId -eq 'Precision M9CFLR5540') {$Model = 'Precision 5540'} if ($DriverReleaseId -eq 'Precision M9MLK') {$Model = 'Precision 7540','Precision 7740'} #=================================================================================================== # Model Precision M #=================================================================================================== if ($DriverReleaseId -match 'Precision W') { $IsLaptop = $false $IsDesktop = $true } if ($DriverReleaseId -eq 'Precision WS5') {$Model = 'Precision T1700'} if ($DriverReleaseId -eq 'Precision WS6') {$Model = 'Precision 5810','Precision T5810','Precision 7810','Precision T7810','Precision 7910','Precision R7910','Precision T7910'} if ($DriverReleaseId -eq 'Precision WS7') {$Model = 'Precision 3420','Precision 3620'} if ($DriverReleaseId -eq 'Precision WS8') {$Model = 'Precision 5720','Precision 5820','Precision 7820','Precision 7920'} if ($DriverReleaseId -eq 'Precision WS9') {$Model = 'Precision 3430','Precision 3630','Precision 3930'} if ($DriverReleaseId -eq 'Precision WS9CFL3431') {$Model = 'Precision 3431'} #=================================================================================================== # Model Venue Pro #=================================================================================================== if ($DriverReleaseId -match 'Venue') { $IsLaptop = $true $IsDesktop = $false } if ($DriverReleaseId -eq 'Venue PRO2') {$Model = 'Venue 8 Pro 5830','Venue 11 Pro 5130','Venue 11 Pro 7130','Venue 11 Pro 7139'} if ($DriverReleaseId -eq 'Venue PRO3') {$Model = 'Venue 11 Pro 7140'} if ($DriverReleaseId -eq 'Venue PRO4') {$Model = 'Venue 5056','Venue 10PRO5056','Venue5855','Venue 8PRO5855'} #=================================================================================================== # Model Vostro #=================================================================================================== if ($DriverReleaseId -match 'Vostro') { $IsLaptop = $true $IsDesktop = $false } if ($DriverReleaseId -eq 'Vostro D8') {$Model = 'CHENGMING 3967','CHENGMING 3968'} if ($DriverReleaseId -eq 'Vostro D9') {$Model = 'CHENGMING 3980'} #=================================================================================================== # Model XPS #=================================================================================================== if ($DriverReleaseId -match 'XPS NOTEBOOK') { $IsLaptop = $true $IsDesktop = $false } if ($DriverReleaseId -eq 'XPS NOTEBOOK1') {$Model = 'XPS 9530'} if ($DriverReleaseId -eq 'XPS NOTEBOOK3') {$Model = 'XPS 9343'} if ($DriverReleaseId -eq 'XPS NOTEBOOK4') {$Model = 'XPS 9250','XPS 9350'} if ($DriverReleaseId -eq 'XPS NOTEBOOK5') {$Model = 'XPS 9360','XPS 9365','XPS 9560'} if ($DriverReleaseId -eq 'XPS NOTEBOOK6') {$Model = 'XPS 9370','XPS 9570','XPS 9575'} if ($DriverReleaseId -eq 'XPS NOTEBOOK7') {$Model = 'XPS 9380'} if ($DriverReleaseId -eq 'XPS NOTEBOOK8') {$Model = 'XPS 7590'} #=================================================================================================== # LastUpdate #=================================================================================================== $LastUpdateRaw = ((($ContentLine.Split('<>')[6]).Trim()).Split(' ')[0,1]) $LastUpdate = [datetime]::ParseExact($LastUpdateRaw, "dd-MMM-yyyy HH:mm", $null) #=================================================================================================== # DriverName #=================================================================================================== $DriverName = "$OSDGroup $SystemFamily $DriverChild $OSNameMatch $DriverVersion" #if ($OSArch) {$DriverName = "$OSDGroup $SystemFamily $DriverChild $OSNameMatch $OSArch $DriverVersion"} #=================================================================================================== # DriverGrouping #=================================================================================================== $DriverGrouping = "$SystemFamily $DriverChild $OSNameMatch" #=================================================================================================== # DriverDescription #=================================================================================================== $DriverDescription = '' #=================================================================================================== # FileType #=================================================================================================== $FileType = $DriverPackFile.split('.')[1] $FileType = $FileType.ToLower() #=================================================================================================== # FileType #=================================================================================================== $FileName = Split-Path $DriverUrl -Leaf $FileName = $FileName.split('.')[1] $FileType = $FileName.ToLower() #=================================================================================================== # DownloadFile #=================================================================================================== $OSNameEdit = $OSNameMatch $OSNameEdit = $OSNameEdit.Replace('.','') $DownloadFile = "$OSNameEdit`_$SystemFamily$DriverChild`_$DriverVersion.$FileType" #=================================================================================================== # DriverInfo #=================================================================================================== $DriverInfo = 'https://www.dell.com/support/article/us/en/04/how13322/dell-family-driver-packs?lang=en' #=================================================================================================== # Create Object #=================================================================================================== $ObjectProperties = @{ OSDVersion = $OSDVersion LastUpdate = $(($LastUpdate).ToString("yyyy-MM-dd")) OSDStatus = $OSDStatus OSDType = $OSDType OSDGroup = $OSDGroup DriverName = $DriverName DriverVersion = $DriverVersion DriverReleaseId = $DriverReleaseID OperatingSystem = $OperatingSystem OsVersion = $OsVersion OsArch = $OsArch OsBuildMax = $OsBuildMax OsBuildMin = $OsBuildMin Make = $Make MakeNe = $MakeNe MakeLike = $MakeLike MakeNotLike = $MakeNotLike MakeMatch = $MakeMatch MakeNotMatch = $MakeNotMatch Generation = $Generation SystemFamily = $SystemFamily Model = $Model ModelNe = $ModelNe ModelLike = $ModelLike ModelNotLike = $ModelNotLike ModelMatch = $ModelMatch ModelNotMatch = $ModelNotMatch SystemSku = $SystemSku SystemSkuNe = $SystemSkuNe DriverGrouping = $DriverGrouping DriverBundle = $DriverBundle DriverWeight = [int] $DriverWeight DownloadFile = $DownloadFile SizeMB = [int] $SizeMB DriverUrl = $DriverUrl DriverInfo = $DriverInfo DriverDescription = $DriverDescription Hash = $Hash OSDGuid = $OSDGuid IsSuperseded = [bool] $IsSuperseded } New-Object -TypeName PSObject -Property $ObjectProperties } #=================================================================================================== # Select-Object #=================================================================================================== $global:GetOSDDriverDellFamily = $global:GetOSDDriverDellFamily | Select-Object OSDVersion, LastUpdate,` OSDStatus, OSDType, OSDGroup,` DriverName, DriverVersion, DriverReleaseId,` OsVersion, OsArch,` #OperatingSystem Generation,` Make,` #MakeNe, MakeLike, MakeNotLike SystemFamily,` Model,` #ModelNe, ModelLike, ModelNotLike, ModelMatch, ModelNotMatch SystemSku,` #SystemSkuNe DriverGrouping,` DownloadFile, SizeMB, DriverUrl, DriverInfo,` #DriverDescription Hash, OSDGuid, IsSuperseded #=================================================================================================== # Supersedence #=================================================================================================== $global:GetOSDDriverDellFamily = $global:GetOSDDriverDellFamily | Sort-Object DriverName -Descending $CurrentOSDDriverDellFamily = @() foreach ($FamilyPack in $global:GetOSDDriverDellFamily) { if ($CurrentOSDDriverDellFamily.DriverGrouping -match $FamilyPack.DriverGrouping) { $FamilyPack.IsSuperseded = $true } else { $CurrentOSDDriverDellFamily += $FamilyPack } } $global:GetOSDDriverDellFamily = $global:GetOSDDriverDellFamily | Where-Object {$_.IsSuperseded -eq $false} #$global:GetOSDDriverDellFamily = $global:GetOSDDriverDellFamily | Where-Object {$_.OsVersion -match '10.0'} #=================================================================================================== # Sort Object #=================================================================================================== $global:GetOSDDriverDellFamily = $global:GetOSDDriverDellFamily | Sort-Object LastUpdate -Descending #=================================================================================================== # Return #=================================================================================================== Return $global:GetOSDDriverDellFamily #=================================================================================================== } |