Private/Drivers/Get-DriverDellFamily.ps1
<#
.SYNOPSIS Returns a DellFamily Pack Object .DESCRIPTION Returns a DellFamily Pack Object Requires BITS for downloading the Downloads Requires Internet access for downloading the Downloads .LINK https://osddrivers.osdeploy.com/functions/get-driverdellfamily #> function Get-DriverDellFamily { [CmdletBinding()] Param () #=================================================================================================== # Uri #=================================================================================================== $Uri = 'http://downloads.delltechcenter.com/DIA/Drivers/' #=================================================================================================== # DriverWebContentRaw #=================================================================================================== $DriverWebContentRaw = @() try { $DriverWebContentRaw = (Invoke-WebRequest $Uri).Content } catch { Write-Error "Could not connect to $Uri" -ErrorAction Stop } #=================================================================================================== # DriverWebContentByLine #=================================================================================================== $DriverWebContentByLine = @() 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 #=================================================================================================== $DriverResults = @() $DriverResults = foreach ($ContentLine in $DriverWebContent) { #=================================================================================================== # Defaults #=================================================================================================== $LastUpdate = [datetime] $(Get-Date) $OSDVersion = $(Get-Module -Name OSDDrivers | Sort-Object Version | Select-Object Version -Last 1).Version $OSDStatus = $null $OSDGroup = 'DellFamily' $OSDType = 'FamilyPack' $DriverName = $null $DriverVersion = $null $DriverGrouping = $null $DriverFamilyChild = $null $DriverFamily = $null $DriverChild = $null $IsDesktop = $null $IsLaptop = $null $IsServer = $false $MakeLike = @() $MakeNotLike = @() $MakeMatch = @('Dell') $MakeNotMatch = @() $ModelLike = @() $ModelNotLike = @() $ModelMatch = @() $ModelNotMatch = @() $ModelEq = @() $ModelNe = @() $SystemFamilyMatch = @() $SystemFamilyNotMatch = @() $SystemSkuMatch = @() $SystemSkuNotMatch = @() $OSNameMatch = @() $OSNameNotMatch = @() $OSArchMatch = @() $OSArchNotMatch = @() $OSVersionMatch = @() $OSVersionNotMatch = @() $OSBuildGE = $null $OSBuildLE = $null $OSInstallationType = 'Client' $OSDPnpClass = $null $OSDPnpClassGuid = $null $DriverBundle = $null $DriverWeight = 100 $DownloadFile = $null $OSDPnpFile = $null $OSDCabFile = $null $OSDTaskFile = $null $FileType = $null $SizeMB = $null $IsSuperseded = $false $DriverUrl = $null $DriverDescription = $null $DriverInfo = $DriverLink.href $DriverCleanup = @('\\Audio\\','\\Video\\') $OSDGuid = $(New-Guid) #=================================================================================================== # DriverFamily #=================================================================================================== if ($ContentLine -match 'Latitude') {$DriverFamily = 'Latitude'} elseif ($ContentLine -match 'OptiPlex') {$DriverFamily = 'OptiPlex'} elseif ($ContentLine -match 'Precision') {$DriverFamily = 'Precision'} elseif ($ContentLine -match 'Venue') {$DriverFamily = 'Venue'} elseif ($ContentLine -match 'Vostro') {$DriverFamily = 'Vostro'} elseif ($ContentLine -match 'XPS') {$DriverFamily = 'XPS'} else {$DriverFamily = ''} #=================================================================================================== # OSNameMatch OSVersionMatch OSVersionMax #=================================================================================================== if ($ContentLine -match "Win7") { $OSNameMatch = 'Win7' $OSVersionMatch = '6.1' } if ($ContentLine -match "Win8") { $OSNameMatch = 'Win8.1' $OSVersionMatch = '6.3' } if ($ContentLine -match "Win10") { $OSNameMatch = 'Win10' $OSVersionMatch = '10.0' $OSArchMatch = '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 "$DriverFamily" $DriverChild = $DriverChild.Trim() $DriverChild = $DriverChild.ToUpper() $DriverFamilyChild = "$DriverFamily $DriverChild" $DriverVersion = $DriverPackFile.split('_.')[2] $DriverVersion = $DriverVersion.Trim() $DriverVersion = $DriverVersion.ToUpper() #=================================================================================================== # Model Latitude #=================================================================================================== if ($DriverFamilyChild -match 'Latitude') { $IsLaptop = $true $IsDesktop = $false } if ($DriverFamilyChild -eq 'Latitude 3X40') {$ModelMatch = 'Latitude 3340','Latitude 3440','Latitude 3540'} if ($DriverFamilyChild -eq 'Latitude E1') {$ModelMatch = 'Latitude E4200','Latitude E4300','Latitude E5400','Latitude E5500','Latitude E6400','Latitude E6500','Precision M2400','Precision M4400','Precision M6400'} if ($DriverFamilyChild -eq 'Latitude E2') {$ModelMatch = 'Latitude E4310','Latitude E5410','Latitude E5510','Latitude E6410','Latitude E6510','Precision M2400','Precision M4500','Precision M6500','Latitude Z600'} if ($DriverFamilyChild -eq 'Latitude E3') {$ModelMatch = 'Latitude 13','Latitude E5420','Latitude E5520','Latitude E6220','Latitude E6320','Latitude E6420','Latitude E6520','Precision M4600','Precision M6600','Latitude XT2'} if ($DriverFamilyChild -eq 'Latitude E4') {$ModelMatch = 'Precision M4700','Precision M4700'} if ($DriverFamilyChild -eq 'Latitude E5') {$ModelMatch = 'Latitude E5440','Latitude E5540','Latitude E6440','Latitude E6540','Latitude E7240','Latitude E7440'} if ($DriverFamilyChild -eq 'Latitude E6') {$ModelMatch = '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 ($DriverFamilyChild -eq 'Latitude E6XFR') {$ModelMatch = 'Latitude 5404','Latitude 7204','Latitude 7404'} if ($DriverFamilyChild -eq 'Latitude E7') {$ModelMatch = 'Latitude 3160','Latitude 3460','Latitude 3560'} if ($DriverFamilyChild -eq 'Latitude E8') {$ModelMatch = 'Latitude 3350','Latitude 3470','Latitude 3570','Latitude 7370','Latitude E3350','Latitude E5270','Latitude E5470','Latitude E5570','Latitude E7270','Latitude E7470'} if ($DriverFamilyChild -eq 'Latitude E8RUGGED') {$ModelMatch = 'Latitude 5414','Latitude 7214','Latitude 7414'} if ($DriverFamilyChild -eq 'Latitude E8TABLET') {$ModelMatch = 'Latitude 3379','Latitude 5175','Latitude 5179','Latitude 7275','Latitude E7275'} if ($DriverFamilyChild -eq 'Latitude E9') {$ModelMatch = '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 ($DriverFamilyChild -eq 'Latitude E9RUGGED') {$ModelMatch = 'Latitude 7212'} if ($DriverFamilyChild -eq 'Latitude E9TABLET') {$ModelMatch = 'Latitude 5285','Latitude 7285'} if ($DriverFamilyChild -eq 'Latitude E10') {$ModelMatch = 'Latitude 3190','Latitude 3490','Latitude 3590','Latitude 5290','Latitude 5490','Latitude 5590','Latitude 7290','Latitude 7390','Latitude 7490'} if ($DriverFamilyChild -eq 'Latitude E10CFL') {$ModelMatch = 'Latitude 5491','Latitude 5495','Latitude 5591'} if ($DriverFamilyChild -eq 'Latitude E10RUGGED') {$ModelMatch = 'Latitude 5420','Latitude 5424','Latitude 7424'} if ($DriverFamilyChild -eq 'Latitude E10TABLET') {$ModelMatch = 'Latitude 3390'} if ($DriverFamilyChild -eq 'Latitude E11') {$ModelMatch = 'Latitude 3300'} if ($DriverFamilyChild -eq 'Latitude E11WHL') {$ModelMatch = 'Latitude 3400','Latitude 3500','Latitude 5300','Latitude 5400','Latitude 5500'} if ($DriverFamilyChild -eq 'Latitude E11WHL2') {$ModelMatch = 'Latitude 7200','Latitude 7300','Latitude 7400'} if ($DriverFamilyChild -eq 'Latitude E11WHL3301') {$ModelMatch = 'Latitude 3301'} if ($DriverFamilyChild -eq 'Latitude E11WHL5x01') {$ModelMatch = 'Latitude 5401','Latitude 5501'} #=================================================================================================== # Model OptiPlex #=================================================================================================== if ($DriverFamilyChild -match 'OptiPlex') { $IsLaptop = $false $IsDesktop = $true } if ($DriverFamilyChild -eq 'OptiPlex D1') {$ModelEq = 'OptiPlex 360','OptiPlex 760','OptiPlex 760'} #Win7 if ($DriverFamilyChild -eq 'OptiPlex D2') {$ModelEq = 'OptiPlex 380','OptiPlex 780','OptiPlex 980','OptiPlex XE'} #Win7 if ($DriverFamilyChild -eq 'OptiPlex D3') {$ModelEq = 'OptiPlex 390','OptiPlex 790','OptiPlex 990'} #Win7 if ($DriverFamilyChild -eq 'OptiPlex D4') {$ModelMatch = 'OptiPlex 3010','OptiPlex 7010','OptiPlex 9010'} if ($DriverFamilyChild -eq 'OptiPlex D5') {$ModelEq = 'OptiPlex 3020','OptiPlex 9020','OptiPlex XE2'} if ($DriverFamilyChild -eq 'OptiPlex D6') {$ModelMatch = 'OptiPlex 3020M','OptiPlex 3030','OptiPlex 7020','OptiPlex 9020M','OptiPlex 9030'} if ($DriverFamilyChild -eq 'OptiPlex D7') {$ModelMatch = 'OptiPlex 3040','OptiPlex 3046','OptiPlex 3240','OptiPlex 5040','OptiPlex 7040','OptiPlex 7440'} if ($DriverFamilyChild -eq 'OptiPlex D8') { $ModelMatch = 'OptiPlex 3050','OptiPlex 5050','OptiPlex 5055','OptiPlex 5250','OptiPlex 7050','OptiPlex 7450' $ModelNotMatch = '5055r' } if ($DriverFamilyChild -eq 'OptiPlex D9') {$ModelMatch = 'OptiPlex 3060','OptiPlex 5060','OptiPlex 5260','OptiPlex 7060','OptiPlex 7460','OptiPlex 7760','OptiPlex XE3'} if ($DriverFamilyChild -eq 'OptiPlex D9MLK') {$ModelMatch = 'OptiPlex 3070','OptiPlex 5070','OptiPlex 5270','OptiPlex 7070','OptiPlex 7470','OptiPlex 7770'} if ($DriverFamilyChild -eq 'OptiPlex 5055') {$ModelEq = 'OptiPlex 5055'} if ($DriverFamilyChild -eq 'OptiPlex 5055R') {$ModelEq = 'OptiPlex 5055R'} #=================================================================================================== # Model Precision M #=================================================================================================== if ($DriverFamilyChild -match 'Precision M') { $IsLaptop = $true $IsDesktop = $false } if ($DriverFamilyChild -eq 'Precision M3800') {$ModelMatch = 'Precision M3800'} if ($DriverFamilyChild -eq 'Precision M5') {$ModelMatch = 'Precision M2800','Precision M4800','Precision M6800'} if ($DriverFamilyChild -eq 'Precision M6') {$ModelMatch = 'Precision 3510','Precision 5510','Precision 7510','Precision 7710','XPS*9550'} if ($DriverFamilyChild -eq 'Precision M7') {$ModelMatch = 'Precision 3520','Precision 5520','Precision 7520','Precision 7720'} if ($DriverFamilyChild -eq 'Precision M8') {$ModelMatch = 'Precision 3530','Precision 5530','Precision 7530','Precision 7730'} if ($DriverFamilyChild -eq 'Precision M8WHL') {$ModelMatch = 'Precision 3540'} if ($DriverFamilyChild -eq 'Precision M9') {$ModelMatch = 'Precision 3541'} if ($DriverFamilyChild -eq 'Precision M9CFLR5540') {$ModelMatch = 'Precision 5540'} if ($DriverFamilyChild -eq 'Precision M9MLK') {$ModelMatch = 'Precision 7540','Precision 7740'} #=================================================================================================== # Model Precision M #=================================================================================================== if ($DriverFamilyChild -match 'Precision W') { $IsLaptop = $false $IsDesktop = $true } if ($DriverFamilyChild -eq 'Precision WS5') {$ModelMatch = 'Precision T1700'} if ($DriverFamilyChild -eq 'Precision WS6') {$ModelMatch = 'Precision 5810','Precision T5810','Precision 7810','Precision T7810','Precision 7910','Precision R7910','Precision T7910'} if ($DriverFamilyChild -eq 'Precision WS7') {$ModelMatch = 'Precision 3420','Precision 3620'} if ($DriverFamilyChild -eq 'Precision WS8') {$ModelMatch = 'Precision 5720','Precision 5820','Precision 7820','Precision 7920'} if ($DriverFamilyChild -eq 'Precision WS9') {$ModelMatch = 'Precision 3430','Precision 3630','Precision 3930'} if ($DriverFamilyChild -eq 'Precision WS9CFL3431') {$ModelMatch = 'Precision 3431'} #=================================================================================================== # Model Venue Pro #=================================================================================================== if ($DriverFamilyChild -match 'Venue') { $IsLaptop = $true $IsDesktop = $false } if ($DriverFamilyChild -eq 'Venue PRO2') {$ModelMatch = 'Venue 8 Pro 5830','Venue 11 Pro 5130','Venue 11 Pro 7130','Venue 11 Pro 7139'} if ($DriverFamilyChild -eq 'Venue PRO3') {$ModelMatch = 'Venue 11 Pro 7140'} if ($DriverFamilyChild -eq 'Venue PRO4') {$ModelMatch = 'Venue 5056','Venue 10PRO5056','Venue5855','Venue 8PRO5855'} #=================================================================================================== # Model Vostro #=================================================================================================== if ($DriverFamilyChild -match 'Vostro') { $IsLaptop = $true $IsDesktop = $false } if ($DriverFamilyChild -eq 'Vostro D8') {$ModelMatch = 'CHENGMING 3967','CHENGMING 3968'} if ($DriverFamilyChild -eq 'Vostro D9') {$ModelMatch = 'CHENGMING 3980'} #=================================================================================================== # Model XPS #=================================================================================================== if ($DriverFamilyChild -match 'XPS NOTEBOOK') { $IsLaptop = $true $IsDesktop = $false } if ($DriverFamilyChild -eq 'XPS NOTEBOOK1') {$ModelMatch = 'XPS 9530'} if ($DriverFamilyChild -eq 'XPS NOTEBOOK3') {$ModelMatch = 'XPS 9343'} if ($DriverFamilyChild -eq 'XPS NOTEBOOK4') {$ModelMatch = 'XPS 9250','XPS 9350'} if ($DriverFamilyChild -eq 'XPS NOTEBOOK5') {$ModelMatch = 'XPS 9360','XPS 9365','XPS 9560'} if ($DriverFamilyChild -eq 'XPS NOTEBOOK6') {$ModelMatch = 'XPS 9370','XPS 9570','XPS 9575'} if ($DriverFamilyChild -eq 'XPS NOTEBOOK7') {$ModelMatch = 'XPS 9380'} if ($DriverFamilyChild -eq 'XPS NOTEBOOK8') {$ModelMatch = 'XPS 7590'} #=================================================================================================== # LastUpdate #=================================================================================================== $LastUpdateRaw = ((($ContentLine.Split('<>')[6]).Trim()).Split(' ')[0,1]) $LastUpdate = [datetime]::ParseExact($LastUpdateRaw, "dd-MMM-yyyy HH:mm", $null) #=================================================================================================== # DriverName #=================================================================================================== $DriverName = "$OSDGroup $DriverFamily $DriverChild $OSNameMatch $DriverVersion" #if ($OSArch) {$DriverName = "$OSDGroup $DriverFamily $DriverChild $OSNameMatch $OSArch $DriverVersion"} #=================================================================================================== # DriverGrouping #=================================================================================================== $DriverGrouping = "$DriverFamily $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`_$DriverFamily$DriverChild`_$DriverVersion.$FileType" #=================================================================================================== # DriverInfo #=================================================================================================== $DriverInfo = 'https://www.dell.com/support/article/us/en/04/how13322/dell-family-driver-packs?lang=en' #=================================================================================================== # OSDFiles #=================================================================================================== $OSDPnpFile = "$($DriverName).drvpnp" $OSDCabFile = "$($DriverName).cab" $OSDTaskFile = "$($DriverName).drvpack" #=================================================================================================== # Create Object #=================================================================================================== $ObjectProperties = @{ LastUpdate = [datetime] $LastUpdate OSDVersion = [string] $OSDVersion OSDStatus = [string] $OSDStatus OSDGroup = [string] $OSDGroup OSDType = [string] $OSDType DriverName = [string] $DriverName DriverVersion = [string] $DriverVersion DriverGrouping = [string] $DriverGrouping DriverFamilyChild = [string] $DriverFamilyChild DriverFamily = [string] $DriverFamily DriverChild = [string] $DriverChild IsDesktop = [bool]$IsDesktop IsLaptop = [bool]$IsLaptop IsServer = [bool]$IsServer MakeLike = [array[]] $MakeLike MakeNotLike = [array[]] $MakeNotLike MakeMatch = [array[]] $MakeMatch MakeNotMatch = [array[]] $MakeNotMatch ModelLike = [array[]] $ModelLike ModelNotLike = [array[]] $ModelNotLike ModelMatch = [array[]] $ModelMatch ModelNotMatch = [array[]] $ModelNotMatch ModelEq = [array[]] $ModelEq ModelNe = [array[]] $ModelNe SystemFamilyMatch = [array[]] $SystemFamilyMatch SystemFamilyNotMatch = [array[]] $SystemFamilyNotMatch SystemSkuMatch = [array[]] $SystemSkuMatch SystemSkuNotMatch = [array[]] $SystemSkuNotMatch OSNameMatch = [array[]] $OSNameMatch OSNameNotMatch = [array[]] $OSNameNotMatch OSArchMatch = [array[]] $OSArchMatch OSArchNotMatch = [array[]] $OSArchNotMatch OSVersionMatch = [array[]] $OSVersionMatch OSVersionNotMatch = [array[]] $OSVersionNotMatch OSBuildGE = [string] $OSBuildGE OSBuildLE = [string] $OSBuildLE OSInstallationType = [string]$OSInstallationType OSDPnpClass = [string] $OSDPnpClass OSDPnpClassGuid = [string] $OSDPnpClassGuid DriverBundle = [string] $DriverBundle DriverWeight = [int] $DriverWeight DownloadFile = [string] $DownloadFile OSDPnpFile = [string] $OSDPnpFile OSDCabFile = [string] $OSDCabFile OSDTaskFile = [string] $OSDTaskFile FileType = [string] $FileType SizeMB = [int] $SizeMB IsSuperseded = [bool] $IsSuperseded DriverUrl = [string] $DriverUrl DriverDescription = [string] $DriverDescription DriverInfo = [string] $DriverInfo DriverCleanup = [array] $DriverCleanup OSDGuid = [string] $(New-Guid) } New-Object -TypeName PSObject -Property $ObjectProperties } #=================================================================================================== # Select-Object #=================================================================================================== $DriverResults = $DriverResults | Select-Object LastUpdate, ` OSDVersion,OSDStatus,OSDGroup,OSDType,` DriverName, DriverVersion, DriverGrouping,` #OSNameMatch,OSNameNotMatch,` OSVersionMatch, OSArchMatch,` DriverFamilyChild, DriverFamily, DriverChild,` IsDesktop,IsLaptop,` #IsServer,` #MakeLike, MakeNotLike,` MakeMatch,` #MakeNotMatch,` #ModelLike, ModelNotLike,` ModelMatch, ModelNotMatch, ModelEq,` #ModelNe,` #SystemFamilyMatch, SystemFamilyNotMatch,` #SystemSkuMatch, SystemSkuNotMatch,` #OSNameNotMatch, OSArchNotMatch, OSVersionNotMatch, OSBuildGE, OSBuildLE,` OSInstallationType,` #OSDPnpClass,OSDPnpClassGuid,` #DriverBundle, DriverWeight,` DownloadFile,` #OSDPnpFile, OSDCabFile, OSDTaskFile,` #FileType,` SizeMB,` IsSuperseded,` DriverUrl,` #DriverDescription,` DriverInfo,` #DriverCleanup,` OSDGuid #=================================================================================================== # Supersedence #=================================================================================================== $DriverResults = $DriverResults | Sort-Object DriverName -Descending $CurrentOSDDriverDellFamily = @() foreach ($FamilyPack in $DriverResults) { if ($CurrentOSDDriverDellFamily.DriverGrouping -match $FamilyPack.DriverGrouping) { $FamilyPack.IsSuperseded = $true } else { $CurrentOSDDriverDellFamily += $FamilyPack } } $DriverResults = $DriverResults | Where-Object {$_.IsSuperseded -eq $false} #$DriverResults = $DriverResults | Where-Object {$_.OSVersionMatch -match '10.0'} #=================================================================================================== # Sort Object #=================================================================================================== $DriverResults = $DriverResults | Sort-Object LastUpdate -Descending #=================================================================================================== # Return #=================================================================================================== Return $DriverResults #=================================================================================================== } |