Private/Drivers/Get-DellFamilyPack.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
<#
.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-DellFamilyPack {
    [CmdletBinding()]
    Param ()
    #===================================================================================================
    # Uri
    #===================================================================================================
    #$Uri = 'http://downloads.delltechcenter.com/DIA/Drivers/'
    $Uri = 'https://downloads.delltechcenter.com/DIA/Drivers/'
    #===================================================================================================
    # DriverWebContentRaw
    #===================================================================================================
    $DriverWebContentRaw = @()
    Write-Host ""
    Write-Verbose "Connecting to $Uri" -Verbose
    try {
        $DriverWebContentRaw = (Invoke-WebRequest $Uri).Links
    }
    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 = @()
    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
        #===================================================================================================
        $OSDVersion = $(Get-Module -Name OSDDrivers | 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              = [datetime] $LastUpdate
            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
    #===================================================================================================
    $DriverResults = $DriverResults | 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
    #===================================================================================================
    $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 {$_.OsVersion -match '10.0'}
    #===================================================================================================
    # Sort Object
    #===================================================================================================
    $DriverResults = $DriverResults | Sort-Object LastUpdate -Descending
    #===================================================================================================
    # Return
    #===================================================================================================
    Return $DriverResults
    #===================================================================================================
}