Archive/Save-OSDDriverNvidiaPack.ps1
<#
.SYNOPSIS Downloads and creates Nvidia Video Driver Packs .DESCRIPTION Downloads and creates Nvidia Video Driver Packs Requires 7-Zip for EXE extraction Requires BITS for downloading the Downloads Requires Internet access .LINK https://osddrivers.osdeploy.com/module/functions/save-osddrivernvidiapack #> function Save-OSDDriverNvidiaPack { [CmdletBinding(DefaultParameterSetName = 'Default')] Param ( #Fully automatic Pack creation [Parameter(ParameterSetName = 'QuickPack', Mandatory = $true)] [ValidateSet('NvidiaPack 10.0 x64','NvidiaPack 10.0 x86','NvidiaPack 6.1 x64','NvidiaPack 6.1 x86')] [string]$QuickPack, #Appends the value to the Driver Pack Name [Parameter(ParameterSetName = 'Default')] [string]$AppendName = 'None', #Driver Pack supported Operating System Architecture [Parameter(ParameterSetName = 'Default')] [ValidateSet ('x64','x86')] [string]$OsArch, #Driver Pack supported Operating System Version [Parameter(ParameterSetName = 'Default')] [ValidateSet ('10.0','6.1')] [string]$OsVersion, #Creates a CAB file from the downloaded Intel Driver [Parameter(ParameterSetName = 'Default')] [switch]$Pack, #Skips GridView for Automation [Parameter(ParameterSetName = 'Default')] [switch]$SkipGridView ) Begin { #=================================================================================================== # Get-OSDDrivers #=================================================================================================== Get-OSDDrivers -CreatePaths -HideDetails #=================================================================================================== # ParameterSetName #=================================================================================================== if ($PSCmdlet.ParameterSetName -eq 'QuickPack') { $CustomName = $QuickPack $Pack = $true $SkipGridView = $true if ($QuickPack -eq 'NvidiaPack 10.0 x64') { $OsArch = 'x64' $OsVersion = '10.0' } if ($QuickPack -eq 'NvidiaPack 10.0 x86') { $OsArch = 'x86' $OsVersion = '10.0' } if ($QuickPack -eq 'NvidiaPack 6.1 x64') { $OsArch = 'x64' $OsVersion = '6.1' } if ($QuickPack -eq 'NvidiaPack 6.1 x86') { $OsArch = 'x86' $OsVersion = '6.1' } } else { if ($AppendName -eq 'None') { $CustomName = "NvidiaPack" } else { $CustomName = "NvidiaPack $AppendName" } } #=================================================================================================== # Require 7-Zip #=================================================================================================== if ($Pack -eq $true) { if (! (Test-Path "$env:ProgramFiles\7-Zip\7z.exe")) { Write-Warning "OSDDrivers: Save-OSDDriverAMDPack requires 7-Zip at $env:ProgramFiles\7-Zip\7z.exe" Write-Warning "OSDDrivers: This is to extract AmdPack and Nvidia Pack Downloads" Write-Warning "OSDDrivers: Pack creation will be disabled" $Pack = $false } } #=================================================================================================== # Get-OSDGather -Property IsAdmin #=================================================================================================== if ($Pack -eq $true) { if ((Get-OSDGather -Property IsAdmin) -eq $false) { Write-Warning 'OSDDrivers: This function needs to be run as Administrator' Write-Warning 'OSDDrivers: This is to generate PNP information' Write-Warning "OSDDrivers: Pack creation will be disabled" $Pack = $false } } #=================================================================================================== # Display Paths #=================================================================================================== Write-Verbose "Home: $GetOSDDriversHome" -Verbose Write-Verbose "Download: $SetOSDDriversPathDownload" -Verbose Write-Verbose "Expand: $SetOSDDriversPathExpand" -Verbose Write-Verbose "Packages: $SetOSDDriversPathPackages" -Verbose #=================================================================================================== # Publish Paths #=================================================================================================== Publish-OSDDriverScripts -PublishPath $SetOSDDriversPathPackages $PackagePath = Get-PathOSDD -Path (Join-Path $SetOSDDriversPathPackages "$CustomName") Write-Verbose "Package Path: $PackagePath" -Verbose Publish-OSDDriverScripts -PublishPath $PackagePath #=================================================================================================== } Process { Write-Verbose '========================================================================================' -Verbose Write-Verbose $MyInvocation.MyCommand.Name -Verbose #=================================================================================================== # Get-OSDDriver #=================================================================================================== $OSDDrivers = @() if ($InputObject) { $SkipGridView = $true $OSDDrivers = $InputObject } else { $OSDDrivers = Get-OSDDriver NvidiaDisplay } #=================================================================================================== # Set-OSDDriver #=================================================================================================== foreach ($item in $OSDDrivers) { $DriverName = $item.DriverName $OSDCabFile = "$($DriverName).cab" $DownloadFile = $item.DownloadFile $OSDGroup = $item.OSDGroup $OSDType = $item.OSDType $DownloadedDriverGroup = (Join-Path $global:SetOSDDriversPathDownload $OSDGroup) $DownloadedDriverPath = (Join-Path $SetOSDDriversPathDownload (Join-Path $OSDGroup $DownloadFile)) if (Test-Path "$DownloadedDriverPath") {$item.OSDStatus = 'Downloaded'} $ExpandedDriverPath = (Join-Path $SetOSDDriversPathExpand (Join-Path $OSDGroup $DriverName)) if (Test-Path "$ExpandedDriverPath") {$item.OSDStatus = 'Expanded'} $PackagedDriverPath = (Join-Path $PackagePath (Join-Path $OSDGroup $OSDCabFile)) if (Test-Path "$PackagedDriverPath") {$item.OSDStatus = 'Packaged'} } #=================================================================================================== # Filters #=================================================================================================== if ($OsArch) {$OSDDrivers = $OSDDrivers | Where-Object {$_.OsArch -match "$OsArch"}} if ($OsVersion) {$OSDDrivers = $OSDDrivers | Where-Object {$_.OsVersion -match "$OsVersion"}} #=================================================================================================== # GridView #=================================================================================================== $OSDDrivers = $OSDDrivers | Sort-Object LastUpdate -Descending if ($SkipGridView.IsPresent) { Write-Warning "OSDDrivers: Skipping Out-GridView Selection" } else { $OSDDrivers = $OSDDrivers | Out-GridView -PassThru -Title "Select Drivers to Download and press OK" } #=================================================================================================== # Download #=================================================================================================== Write-Verbose "===================================================================================================" foreach ($OSDDriver in $OSDDrivers) { $OSDType = $OSDDriver.OSDType Write-Verbose "OSDType: $OSDType" $DriverInfo = $OSDDriver.DriverInfo Write-Verbose "DriverInfo: $DriverInfo" $DriverUrl = $OSDDriver.DriverUrl Write-Verbose "DriverUrl: $DriverUrl" $DriverName = $OSDDriver.DriverName Write-Verbose "DriverName: $DriverName" $DriverGrouping = $OSDDriver.DriverGrouping Write-Verbose "DriverGrouping: $DriverGrouping" $DownloadFile = $OSDDriver.DownloadFile Write-Verbose "DownloadFile: $DownloadFile" $OSDGroup = $OSDDriver.OSDGroup Write-Verbose "OSDGroup: $OSDGroup" $OSDCabFile = "$($DriverName).cab" Write-Verbose "OSDCabFile: $OSDCabFile" $DownloadedDriverPath = (Join-Path $SetOSDDriversPathDownload (Join-Path $OSDGroup $DownloadFile)) Write-Verbose "DownloadedDriverPath: $DownloadedDriverPath" $ExpandedDriverPath = (Join-Path $SetOSDDriversPathExpand (Join-Path $OSDGroup $DriverName)) Write-Verbose "ExpandedDriverPath: $ExpandedDriverPath" $PackagedDriverPath = (Join-Path $PackagePath (Join-Path $DriverGrouping $OSDCabFile)) Write-Verbose "PackagedDriverPath: $PackagedDriverPath" Write-Host "$DriverName" -ForegroundColor Green #=================================================================================================== # Driver Download #=================================================================================================== Write-Host "Driver Download: $DownloadedDriverPath " -ForegroundColor Gray -NoNewline $DownloadedDriverGroup = Get-PathOSDD -Path (Join-Path $SetOSDDriversPathDownload $OSDGroup) if (Test-Path "$DownloadedDriverPath") { Write-Host 'Complete!' -ForegroundColor Cyan } else { Write-Host "Downloading ..." -ForegroundColor Cyan Write-Host "$DriverUrl" -ForegroundColor Gray if ($OSDGroup -eq 'AmdPack') { #Thanks @manelrodero $AmdAsk = Invoke-WebRequest -Uri "$DriverInfo" -Method Get $Headers = @{ Referer = "$DriverInfo" ; Cookie = $AmdAsk.BaseResponse.Cookies } Invoke-WebRequest -Uri "$DriverUrl" -Method Get -Headers $Headers -OutFile "$DownloadedDriverPath" } else { Start-BitsTransfer -Source $DriverUrl -Destination "$DownloadedDriverPath" -ErrorAction Stop } } #=================================================================================================== # AmdPack Manual Download #=================================================================================================== if (-not (Test-Path "$DownloadedDriverPath")) { if ($OSDGroup -eq 'AmdPack') { Write-Host "" Write-Warning "AMD has blocked direct Driver downloads so use this workaround" Write-Host "1) Open the following URL: " -NoNewline -ForegroundColor Cyan Write-Host "$DriverInfo" Write-Host "2) Find the Driver link to " -NoNewline -ForegroundColor Cyan Write-Host "$DownloadFile" Write-Host "3) Save the download as " -NoNewline -ForegroundColor Cyan Write-Host "$DownloadedDriverPath" Write-Host "" Pause } } #=================================================================================================== # Validate Driver Download #=================================================================================================== if (-not (Test-Path "$DownloadedDriverPath")) { Write-Warning "Driver Download: Could not download Driver to $DownloadedDriverPath ... Exiting" Break } #=================================================================================================== # Verify 7zip #=================================================================================================== if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) { Write-Warning "Could not find $env:ProgramFiles\7-Zip\7z.exe" Write-Warning "7-zip is required to expand this Downloaded Driver" Write-Warning "You can download it from https://www.7-zip.org/" Continue } #=================================================================================================== # Driver Expand #=================================================================================================== Write-Host "Driver Expand: $ExpandedDriverPath " -ForegroundColor Gray -NoNewline if (Test-Path "$ExpandedDriverPath") { Write-Host 'Complete!' -ForegroundColor Cyan } else { Write-Host 'Expanding ...' -ForegroundColor Cyan & "$env:ProgramFiles\7-Zip\7z.exe" x -o"$ExpandedDriverPath" "$DownloadedDriverPath" -r ; } #=================================================================================================== # Verify Driver Expand #=================================================================================================== if (-not (Test-Path "$ExpandedDriverPath")) { Write-Warning "Driver Expand: Could not expand Driver to $ExpandedDriverPath ... Exiting" Break } $OSDDriver.OSDStatus = 'Expanded' #=================================================================================================== # PACK #=================================================================================================== if ($Pack.IsPresent) { #=================================================================================================== # Save-PnpOSDDriverPack #=================================================================================================== $OSDPnpClass = $OSDDriver.OSDPnpClass $OSDPnpFile = "$($DriverName).drvpnp" Write-Host "Save-PnpOSDDriverPack: Generating OSDDriverPNP (OSDPnpClass: $OSDPnpClass) ..." -ForegroundColor Gray Save-PnpOSDDriverPack -ExpandedDriverPath "$ExpandedDriverPath" $OSDPnpClass #=================================================================================================== # ExpandedDriverPath OSDDriver Objects #=================================================================================================== $OSDDriver | Export-Clixml -Path "$ExpandedDriverPath\OSDDriver.clixml" -Force $OSDDriver | ConvertTo-Json | Out-File -FilePath "$ExpandedDriverPath\OSDDriver.drvpack" -Force Publish-OSDDriverScripts -PublishPath "$PackagePath Test" New-Item "$PackagePath Test\$DriverGrouping" -ItemType Directory -Force | Out-Null Copy-Item "$ExpandedDriverPath\OSDDriver.drvpack" "$PackagePath Test\$DriverGrouping\$DriverName.drvpack" -Force Copy-Item "$ExpandedDriverPath\OSDDriver.drvpnp" "$PackagePath Test\$DriverGrouping\$DriverName.drvpnp" -Force Copy-Item "$ExpandedDriverPath\OSDDriver-Devices.csv" "$PackagePath Test\$DriverGrouping\$DriverName.csv" -Force Copy-Item "$ExpandedDriverPath\OSDDriver-Devices.txt" "$PackagePath Test\$DriverGrouping\$DriverName.txt" -Force #=================================================================================================== # Create Package #=================================================================================================== $PackagedDriverGroup = Get-PathOSDD -Path (Join-Path $PackagePath $DriverGrouping) Write-Verbose "PackagedDriverGroup: $PackagedDriverGroup" -Verbose Write-Verbose "PackagedDriverPath: $PackagedDriverPath" -Verbose if (Test-Path "$PackagedDriverPath") { #Write-Warning "Compress-OSDDriver: $PackagedDriverPath already exists" } else { New-CabFileOSDDriver -ExpandedDriverPath $ExpandedDriverPath -PublishPath $PackagedDriverGroup } Copy-Item "$ExpandedDriverPath\OSDDriver-Devices.csv" "$PackagePath\$DriverGrouping\$DriverName.csv" -Force Copy-Item "$ExpandedDriverPath\OSDDriver-Devices.txt" "$PackagePath\$DriverGrouping\$DriverName.txt" -Force #=================================================================================================== # Verify Driver Package #=================================================================================================== if (-not (Test-Path "$PackagedDriverPath")) { Write-Warning "Driver Package: Could not package Driver to $PackagedDriverPath ... Exiting" Continue } $OSDDriver.OSDStatus = 'Package' #=================================================================================================== # Export Results #=================================================================================================== $OSDDriver | Export-Clixml -Path "$ExpandedDriverPath\OSDDriver.clixml" -Force $OSDDriver | ConvertTo-Json | Out-File -FilePath "$ExpandedDriverPath\OSDDriver.drvpack" -Force $OSDDriver | ConvertTo-Json | Out-File -FilePath "$PackagedDriverGroup\$($DriverName).drvpack" -Force #=================================================================================================== # Export Files #=================================================================================================== #Write-Verbose "Verify: $ExpandedDriverPath\OSDDriver.drvpnp" if (Test-Path "$ExpandedDriverPath\OSDDriver.drvpnp") { Write-Verbose "Copy-Item: $ExpandedDriverPath\OSDDriver.drvpnp to $PackagedDriverGroup\$OSDPnpFile" Copy-Item -Path "$ExpandedDriverPath\OSDDriver.drvpnp" -Destination "$PackagedDriverGroup\$OSDPnpFile" -Force | Out-Null } $OSDDriver | Export-Clixml -Path "$ExpandedDriverPath\OSDDriver.clixml" -Force $OSDDriver | ConvertTo-Json | Out-File -FilePath "$ExpandedDriverPath\OSDDriver.drvpack" -Force $OSDDriver | ConvertTo-Json | Out-File -FilePath "$PackagedDriverGroup\$($DriverName).drvpack" -Force #=================================================================================================== # Publish-OSDDriverScripts #=================================================================================================== Publish-OSDDriverScripts -PublishPath $PackagedDriverGroup } } } End { #=================================================================================================== # Publish-OSDDriverScripts #=================================================================================================== Write-Host "Complete!" -ForegroundColor Green #=================================================================================================== } } |