Public/Functions/Other/Save-WinPECloudDriver.ps1
function Save-WinPECloudDriver { <# .SYNOPSIS Download and expand WinPE Drivers .DESCRIPTION Download and expand WinPE Drivers This function must be run in Windows .LINK https://github.com/OSDeploy/OSD/tree/master/Docs #> [CmdletBinding(PositionalBinding = $false)] [OutputType([System.IO.FileInfo])] param ( [System.String[]] #WinPE Driver: Download and install in WinPE drivers from Dell,HP,IntelNet,LenovoDock,Nutanix,Surface,USB,VMware,WiFi [ValidateSet('*','Dell','HP','IntelNet','LenovoDock','Surface','Nutanix','USB','VMware','WiFi')] $CloudDriver, [System.String[]] #WinPE Driver: HardwareID of the Driver download from Microsoft Catalog [Alias('HardwareID')] $DriverHWID, [System.String] #WinPE Driver: Destination path to save the drivers #If not specified, a random directory in $env:TEMP is selected $Path ) #================================================= # Block #================================================= Block-WinPE Block-StandardUser Block-WindowsVersionNe10 Block-PowerShellVersionLt5 #================================================= # CloudDriver #================================================= if ($CloudDriver -contains '*') { $CloudDriver = @('Dell','HP','IntelNet','LenovoDock','Nutanix','Surface','USB','VMware','WiFi') } $DellCloudDriverText = 'Dell WinPE Driver Pack' $DellCloudDriverPack = Get-DellWinPEDriverPack $HpCloudDriverText = 'HP WinPE Driver Pack' $HpCloudDriverPack = Get-HpWinPEDriverPack $OSDCatalogIntelEthernetDriver = Get-IntelEthernetDriverPack | ` Where-Object {($_.OSVersion -match '10.0')} | ` Where-Object {($_.OSArch -match 'x64')} | ` Select-Object -First 1 $IntelEthernetCloudDriverUrl = $OSDCatalogIntelEthernetDriver.DriverUrl $IntelEthernetCloudDriverVersion = $OSDCatalogIntelEthernetDriver.DriverVersion $IntelEthernetCloudDriverText = "Intel Ethernet Driver Pack [$IntelEthernetCloudDriverVersion] $IntelEthernetCloudDriverUrl" $OSDCatalogIntelWirelessDriver = Get-IntelWirelessDriverPack | ` Where-Object {($_.OSVersion -match '10.0')} | ` Where-Object {($_.OSArch -match 'x64')} | ` Select-Object -First 1 $IntelWiFiCloudDriverUrl = $OSDCatalogIntelWirelessDriver.DriverUrl $IntelWiFiCloudDriverVersion = $OSDCatalogIntelWirelessDriver.DriverVersion $IntelWiFiCloudDriverText = "Intel Wireless Driver Pack [$IntelWiFiCloudDriverVersion] $IntelWiFiCloudDriverUrl" $LenovoCloudDriverText = 'Lenovo WinPE Driver Pack' $LenovoCloudDriverPacks = @( 'https://pcsupport.lenovo.com/downloads/DS105415' 'https://pcsupport.lenovo.com/downloads/DS542093' 'https://pcsupport.lenovo.com/downloads/DS542998' 'https://support.lenovo.com/downloads/DS104737' 'https://support.lenovo.com/downloads/DS105119' 'https://support.lenovo.com/downloads/DS105977' 'https://support.lenovo.com/downloads/DS106048' 'https://support.lenovo.com/downloads/DS106096' 'https://support.lenovo.com/downloads/DS112079' 'https://support.lenovo.com/downloads/DS112425' 'https://support.lenovo.com/downloads/DS113152' 'https://support.lenovo.com/downloads/DS119040' 'https://support.lenovo.com/downloads/DS119264' 'https://support.lenovo.com/downloads/DS119270' 'https://support.lenovo.com/downloads/DS119281' 'https://support.lenovo.com/downloads/DS120413' 'https://support.lenovo.com/downloads/DS120934' 'https://support.lenovo.com/downloads/DS500698' 'https://support.lenovo.com/downloads/DS500699' 'https://support.lenovo.com/downloads/DS500715' 'https://support.lenovo.com/downloads/DS500728' 'https://support.lenovo.com/downloads/DS500738' 'https://support.lenovo.com/downloads/DS501356' 'https://support.lenovo.com/downloads/DS501531' 'https://support.lenovo.com/downloads/DS502154' 'https://support.lenovo.com/downloads/DS502454' 'https://support.lenovo.com/downloads/DS503363' 'https://support.lenovo.com/downloads/DS503944' 'https://support.lenovo.com/downloads/DS504611' 'https://support.lenovo.com/downloads/DS504613' 'https://support.lenovo.com/downloads/DS505256' 'https://support.lenovo.com/downloads/DS505931' 'https://support.lenovo.com/downloads/DS541513' 'https://support.lenovo.com/downloads/DS542109' 'https://support.lenovo.com/downloads/DS543834' 'https://support.lenovo.com/downloads/DS544286' 'https://support.lenovo.com/downloads/DS545020' 'https://support.lenovo.com/downloads/DS545687' 'https://support.lenovo.com/downloads/DS546529' 'https://support.lenovo.com/downloads/DS547277' 'https://support.lenovo.com/downloads/DS547601' 'https://support.lenovo.com/downloads/DS547827' 'https://support.lenovo.com/downloads/DS548453' 'https://support.lenovo.com/downloads/DS549669' 'https://support.lenovo.com/downloads/DS549738' 'https://support.lenovo.com/downloads/DS551195' 'https://support.lenovo.com/downloads/DS551368' 'https://support.lenovo.com/downloads/DS554384' 'https://support.lenovo.com/downloads/ds504277' ) $LenovoDockCloudDriverText = 'Lenovo Dock WinPE Driver Pack [22.1.31]' $LenovoDockCloudDriverUrl = @( 'https://download.lenovo.com/pccbbs/mobiles/rtk-winpe-w10.zip' 'https://download.lenovo.com/km/media/attachment/USBCG2.zip' ) $NutanixCloudDriverText = 'Nutanix WinPE Driver Pack [Microsoft Catalog]' $NutanixCloudDriverHwids = @( 'VEN_1AF4&DEV_1000 and VEN_1AF4&DEV_1041' #Red Hat Nutanix VirtIO Ethernet Adapter 'VEN_1AF4&DEV_1002' #Red Hat Nutanix VirtIO Balloon 'VEN_1AF4&DEV_1004 and VEN_1AF4&DEV_1048' #Red Hat Nutanix VirtIO SCSI pass-through controller ) #https://docs.microsoft.com/en-us/surface/enable-surface-keyboard-for-windows-pe-deployment $SurfaceCloudDriverText = 'Surface WinPE Driver Pack [Microsoft Catalog]' $SurfaceCloudDriverHwids = @( 'MSHW0028' #Button and MSHW0040 'MSHW0084' #Serial Hub 'MSHW0091' #ACPI Notify 'MSHW0094' #Null 'MSHW0096' #Keyboard 'MSHW0146' #Battery 'MSHW0153' #HotPlug 'MSHW0184' #Light Sensor ) #'VEN_8086&DEV_A0D0 VEN_8086&DEV_43D0 VEN_8086&DEV_A0D1 VEN_8086&DEV_43D1' #Touch $UsbDongleHwidsText = 'USB Dongle Driver Pack [Microsoft Catalog]' $UsbDongleHwids = @( 'VID_045E&PID_0927 VID_045E&PID_0927 VID_045E&PID_09A0 Surface Ethernet' 'VID_0B95&PID_7720 VID_0B95&PID_7E2B Asix AX88772 USB2.0 to Fast Ethernet' 'VID_0B95&PID_1790 ASIX AX88179 USB 3.0 to Gigabit Ethernet' 'VID_0BDA&PID_8153 Realtek USB GbE and Dell DA 300' 'VID_13B1&PID_0041' 'VID_17EF&PID_720C Lenovo USB-C Ethernet' ) $VmwareCloudDriverText = 'VMware WinPE Driver Pack [Microsoft Catalog]' $VmwareCloudDriverHwids = @( 'VEN_15AD&DEV_0740' #VMware Virtual Machine Communication Interface 'VEN_15AD&DEV_07B0' #VMware VMXNET3 Ethernet Controller 'VEN_15AD&DEV_07C0' #VMware PVSCSI Controller ) #================================================= # Block #================================================= Block-WinPE Block-StandardUser Block-WindowsVersionNe10 Block-PowerShellVersionLt5 Block-NoCurl Block-NoInternet #================================================= # Path #================================================= if (-not $Path) { $Path = Join-Path $env:TEMP (Get-Random) Write-Warning "Path was not specified, defaulting to $Path" } If (-not (Test-Path $Path)) { try { $null = New-Item -Path $Path -ItemType Directory -Force -ErrorAction Stop } catch { Write-Error $_ Break } } #================================================= # DriverHWID #================================================= foreach ($Item in $DriverHWID) { Save-MsUpCatDriver -HardwareID $Item -DestinationDirectory (Join-Path $Path 'HardwareID') } #================================================= # CloudDriver #================================================= foreach ($DriverPack in $CloudDriver) { #================================================= # Dell #================================================= if ($DriverPack -eq 'Dell'){ Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $DellCloudDriverText" if (Test-WebConnection -Uri $DellCloudDriverPack) { $DriverPackDownload = Save-WebFile -SourceUrl $DellCloudDriverPack if (Test-Path $DriverPackDownload.FullName) { $DriverPackItem = Get-Item -Path $DriverPackDownload.FullName $DriverPackExpand = Join-Path $Path (Join-Path $DriverPack $DriverPackItem.BaseName) if (-NOT (Test-Path $DriverPackExpand)) { New-Item -Path $DriverPackExpand -ItemType Directory -Force | Out-Null } Expand -R "$($DriverPackItem.FullName)" -F:* "$DriverPackExpand" | Out-Null if (Test-Path "$DriverPackExpand\winpe\x86") { $null = Remove-Item -Path "$DriverPackExpand\winpe\x86" -Recurse -Force -ErrorAction Ignore } } } else { Write-Warning "Unable to connect to $DellCloudDriverPack" } } #================================================= # HP #================================================= if ($DriverPack -eq 'HP') { Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $HpCloudDriverText" if ($null -eq $HpCloudDriverPack){ Write-Warning "Unable to determine HP Driver Pack URL" Write-Warning "Check Get-HPWinPEDriverPack function" } if (Test-WebConnection -Uri $HpCloudDriverPack) { $DriverPackDownload = Save-WebFile -SourceUrl $HpCloudDriverPack if (Test-Path $DriverPackDownload.FullName) { Write-Verbose "Downloaded $DriverPackDownload" $DriverPackItem = Get-Item -Path $DriverPackDownload.FullName $DriverPackExpand = Join-Path $Path (Join-Path $DriverPack $DriverPackItem.BaseName) Start-Process -FilePath $DriverPackItem -ArgumentList "/s /e /f `"$DriverPackExpand`"" -Wait } } else { Write-Warning "Unable to connect to $HpCloudDriverPack" } } #================================================= # Intel Ethernet #================================================= if ($DriverPack -eq 'IntelNet') { Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $IntelEthernetCloudDriverText" if (Test-WebConnection -Uri $IntelEthernetCloudDriverUrl) { $DriverPackDownload = Save-WebFile -SourceUrl $IntelEthernetCloudDriverUrl if (Test-Path $DriverPackDownload.FullName) { $DriverPackItem = Get-Item -Path $DriverPackDownload.FullName $DriverPackExpand = Join-Path $Path (Join-Path $DriverPack $DriverPackItem.BaseName) Expand-Archive -Path $DriverPackItem -DestinationPath $DriverPackExpand -Force #$DriverPackExpand = Join-Path $DriverPackItem.Directory $DriverPackItem.BaseName #Expand-Archive -Path $DriverPackItem -DestinationPath $DriverPackExpand -Force #$IntelExe = Get-ChildItem -Path $DriverPackExpand 'Wired_driver_26.8_x64.exe' #$IntelExe | Rename-Item -newname { $_.name -replace '.exe','.zip' } -Force -ErrorAction Ignore #$DriverPackItem = Get-ChildItem -Path $DriverPackExpand 'Wired_driver_26.8_x64.zip' -Recurse #$DriverPackExpand = Join-Path $DriverPackItem.Directory $DriverPackItem.BaseName #$DriverPackExpand = Join-Path $Path (Join-Path $DriverPack $DriverPackItem.BaseName) #Expand-Archive -Path $DriverPackItem.FullName -DestinationPath $DriverPackExpand -Force $RemoveItems = Get-ChildItem -Path $DriverPackExpand -Directory -Recurse | Where-Object {$_.Name -in @('APPS','DDP_Profiles','DOCS','NDIS63','NDIS64','NVMUpdatePackage','RDMA')} foreach ($Item in $RemoveItems) { Remove-Item $Item.FullName -Recurse -Force -ErrorAction Ignore } } } else { Write-Warning "Unable to connect to $IntelEthernetCloudDriverUrl" } } #================================================= # Intel WiFi #================================================= if ($DriverPack -eq 'WiFi') { Write-Host -ForegroundColor Yellow $IntelWiFiCloudDriverText if (Test-WebConnection -Uri $IntelWiFiCloudDriverUrl) { $DriverPackDownload = Save-WebFile -SourceUrl $IntelWiFiCloudDriverUrl if (Test-Path $DriverPackDownload.FullName) { $DriverPackItem = Get-Item -Path $DriverPackDownload.FullName $DriverPackExpand = Join-Path $Path (Join-Path $DriverPack $DriverPackItem.BaseName) Expand-Archive -Path $DriverPackItem -DestinationPath $DriverPackExpand -Force } } else { Write-Warning "Unable to connect to $IntelWiFiCloudDriverUrl" } } #================================================= # LenovoDock #================================================= if ($DriverPack -eq 'LenovoDock') { Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $LenovoDockCloudDriverText" foreach ($OnlineDriver in $LenovoDockCloudDriverUrl) { if (Test-WebConnection -Uri $OnlineDriver) { $DriverPackDownload = Save-WebFile -SourceUrl $OnlineDriver if (Test-Path $DriverPackDownload.FullName) { $DriverPackItem = Get-Item -Path $DriverPackDownload.FullName $DriverPackExpand = Join-Path $Path (Join-Path $DriverPack $DriverPackItem.BaseName) Expand-Archive -Path $DriverPackItem -DestinationPath $DriverPackExpand -Force Get-ChildItem -Path "$DriverPackExpand\WIN10\32" | Remove-Item -Recurse -Force } } else { Write-Warning "Unable to connect to $LenovoDockCloudDriverUrl" } } } #================================================= # Nutanix #================================================= if ($DriverPack -eq 'Nutanix') { Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $NutanixCloudDriverText" Save-MsUpCatDriver -HardwareID $NutanixCloudDriverHwids -DestinationDirectory (Join-Path $Path $DriverPack) } #================================================= # Surface #================================================= if ($DriverPack -eq 'Surface') { Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $SurfaceCloudDriverText" Save-MsUpCatDriver -HardwareID $SurfaceCloudDriverHwids -DestinationDirectory (Join-Path $Path $DriverPack) } #================================================= # USB Dongles #================================================= if ($DriverPack -eq 'USB') { Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $UsbDongleHwidsText" Save-MsUpCatDriver -HardwareID $UsbDongleHwids -DestinationDirectory (Join-Path $Path $DriverPack) } #================================================= # VMware #================================================= if ($DriverPack -eq 'VMware') { Write-Host -ForegroundColor Yellow "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $VmwareCloudDriverText" Save-MsUpCatDriver -HardwareID $VmwareCloudDriverHwids -DestinationDirectory (Join-Path $Path $DriverPack) } } #================================================= # Complete #================================================= $DriverPath = Get-Item $Path if ($Clipboard) { Set-Clipboard -Value $DriverPath.FullName -Verbose } Return $DriverPath #================================================= } |