private/Save-WinPEDriverPackageIntelEthernet.ps1
|
#Requires -PSEdition Core function Save-WinPEDriverPackageIntelEthernet { <# .SYNOPSIS Downloads and prepares an Intel Ethernet WinPE driver package .DESCRIPTION Downloads an Intel Ethernet ZIP package to the OSDeployCore download cache and verifies its SHA256 checksum through Invoke-WinPEDriverPackageDownload. Unless DownloadOnly is specified, the function expands the archive into the architecture-specific managed architecture-specific winpedrivers folder when that folder contains no files. After expansion, the function removes non-WinPE payload including applications, documentation, Linux and FreeBSD content, server driver sets, selected older NDIS sets, firmware update content, and RDMA content. This cleanup runs whenever expansion is not bypassed, regardless of Force. .PARAMETER DriverPackage Specifies the OSDeployWinPEDriver.Package object to download. The object supplies the package name, version, architecture, URIs, filename, and SHA256 checksum. .PARAMETER Force Downloads the package again and passes Force to ZIP expansion. It does not suppress post-expansion cleanup. .PARAMETER DownloadOnly Returns after downloading the archive without expanding or cleaning driver content. .EXAMPLE PS> $package = Get-WinPEDriverPackageCore | Where-Object Name -Match 'Intel.*Ethernet' | Select-Object -First 1; Save-WinPEDriverPackageIntelEthernet -DriverPackage $package Downloads, expands, and removes non-WinPE content from the first Intel Ethernet package. .INPUTS None. This function does not accept pipeline input. .OUTPUTS System.IO.FileInfo. Returns the downloaded ZIP file, or no object when the download fails. .NOTES Author: David Segura Company: Recast Software Version: 1.0.0 Date: 2026-08-28 Assumes the OSDeployCore cache and Boot-Assets paths are initialized and writable. .LINK Save-WinPEDriverPackageCore #> [CmdletBinding()] [OutputType([System.IO.FileInfo])] param ( [Parameter(Mandatory)] [PSTypeName('OSDeployWinPEDriver.Package')] [PSCustomObject]$DriverPackage, [Parameter()] [switch]$Force, [Parameter()] [switch]$DownloadOnly ) $package = $DriverPackage $idPrefix = ($package.Name -split '-')[0] $downloadDir = Join-Path $script:OSDeployCoreDownloadsPath $idPrefix $targetPath = Join-Path $downloadDir $package.FileName $driverDir = Join-Path $script:OSDeployBootAssetsPath "winpedrivers-$($package.Architecture)" | Join-Path -ChildPath "$($package.Name)-$($package.Version)" Write-HostDateTimeDarkGray -Message "Starting $($package.Name)" $downloadedFile = Invoke-WinPEDriverPackageDownload ` -Uri $package.DownloadUri ` -DestinationPath $targetPath ` -SearchUri $package.UpdateUri ` -ExpectedSHA256 $package.Checksums.SHA256 ` -Force:$Force if (-not $downloadedFile) { return } if ($DownloadOnly) { return $downloadedFile } $expandedFiles = Get-ChildItem -Path $driverDir -Recurse -File -ErrorAction SilentlyContinue if (-not $expandedFiles) { if (-not (Test-Path -Path $driverDir)) { New-Item -ItemType Directory -Path $driverDir -Force | Out-Null } Write-HostDateTimeDarkGray -Message "Expand: $targetPath" Write-HostDateTimeDarkGray -Message "Output: $driverDir" Write-Verbose "[$($MyInvocation.MyCommand.Name)] Expanding '$($package.FileName)' to '$driverDir'" Expand-WinPEDriverPackageZip -Path $targetPath -DestinationPath $driverDir -Force:$Force } else { Write-Verbose "[$($MyInvocation.MyCommand.Name)] '$driverDir' already contains expanded files. Skipping expansion." } foreach ($cleanupPath in @( (Join-Path $driverDir 'APPS'), (Join-Path $driverDir 'DDP_Profiles'), (Join-Path $driverDir 'DOCS'), (Join-Path $driverDir 'NVMUpdatePackage'), (Join-Path $driverDir 'Resource'), (Join-Path $driverDir 'SetupBD.exe'), (Join-Path $driverDir 'PRO1000\LINUX'), (Join-Path $driverDir 'PRO1000\Winx64\NDIS65'), (Join-Path $driverDir 'PRO1000\Winx64\NDIS68'), (Join-Path $driverDir 'PRO1000\Winx64\WS2022'), (Join-Path $driverDir 'PRO1000\Winx64\WS2025'), (Join-Path $driverDir 'PRO2500\Winx64\NDIS68'), (Join-Path $driverDir 'PRO2500\Winx64\WS2022'), (Join-Path $driverDir 'PRO2500\Winx64\WS2025'), (Join-Path $driverDir 'PRO40GB\Linux'), (Join-Path $driverDir 'PRO40GB\Winx64\NDIS65'), (Join-Path $driverDir 'PRO40GB\Winx64\NDIS68'), (Join-Path $driverDir 'PRO40GB\Winx64\WS2022'), (Join-Path $driverDir 'PRO40GB\Winx64\WS2025'), (Join-Path $driverDir 'PROAVF\FreeBSD'), (Join-Path $driverDir 'PROAVF\Linux'), (Join-Path $driverDir 'PROAVF\Winx64\NDIS65'), (Join-Path $driverDir 'PROAVF\Winx64\NDIS68'), (Join-Path $driverDir 'PROAVF\Winx64\WS2022'), (Join-Path $driverDir 'PROCGB\FreeBSD'), (Join-Path $driverDir 'PROCGB\Linux'), (Join-Path $driverDir 'PROCGB\Winx64\NDIS65'), (Join-Path $driverDir 'PROCGB\Winx64\NDIS68'), (Join-Path $driverDir 'PROCGB\Winx64\WS2022'), (Join-Path $driverDir 'PROCGB\Winx64\WS2025'), (Join-Path $driverDir 'PROXGB\FreeBSD'), (Join-Path $driverDir 'PROXGB\Linux'), (Join-Path $driverDir 'PROXGB\Winx64\NDIS65'), (Join-Path $driverDir 'PROXGB\Winx64\NDIS68'), (Join-Path $driverDir 'PROXGB\Winx64\WS2022'), (Join-Path $driverDir 'PROXGB\Winx64\WS2025'), (Join-Path $driverDir 'RDMA\FreeBSD'), (Join-Path $driverDir 'RDMA\Linux'), (Join-Path $driverDir 'RDMA\Windows\W10'), (Join-Path $driverDir 'RDMA\Windows\ws2019'), (Join-Path $driverDir 'RDMA\Windows\ws2022'), (Join-Path $driverDir 'RDMA\Windows\ws2025') )) { if (Test-Path -Path $cleanupPath) { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Removing '$cleanupPath'" Remove-Item -Path $cleanupPath -Recurse -Force } } $downloadedFile } |