Private/core-driverpack/ConvertTo-OSDCloudDriverPack.ps1
|
function ConvertTo-OSDCloudDriverPack { <# .SYNOPSIS Converts core driver pack objects to the legacy OSDCloud driver pack schema. .DESCRIPTION Projects driver pack objects read from core\driverpacks into the property schema returned by Get-OSDCloudDriverPacks. Compatibility values are derived without evaluating OSDCore licensing. .PARAMETER InputObject One or more core driver pack catalog objects to convert. .EXAMPLE Get-OSDCoreDriverPackCatalogDell -LocalOnly | ConvertTo-OSDCloudDriverPack Converts bundled Dell driver pack records to the public OSDCloud schema. .LINK https://github.com/OSDeploy/OSD/tree/master/docs .NOTES Author: David Segura - Recast Software 2026-09-30 - Added core catalog compatibility projection #> [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateNotNull()] [System.Management.Automation.PSObject] $InputObject ) begin { $Error.Clear() Write-Verbose "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)] Start" } process { $systemIds = @($InputObject.SystemId | Where-Object { -not [string]::IsNullOrWhiteSpace([string]$_) }) $identitySystemIds = @($systemIds | ForEach-Object { ([string]$_).ToUpperInvariant() } | Sort-Object -Unique) $identity = '{0}|{1}|{2}|{3}|{4}' -f ([string]$InputObject.Manufacturer).ToUpperInvariant(), ([string]$InputObject.Model).ToUpperInvariant(), ($identitySystemIds -join ','), ([string]$InputObject.FileName).ToUpperInvariant(), ([string]$InputObject.OSArchitecture).ToUpperInvariant() $md5 = [System.Security.Cryptography.MD5]::Create() try { $identityBytes = [System.Text.Encoding]::UTF8.GetBytes($identity) $hashBytes = $md5.ComputeHash($identityBytes) } finally { $md5.Dispose() } $hashText = [System.BitConverter]::ToString($hashBytes).Replace('-', '').ToLowerInvariant() $guid = '{0}-{1}-{2}-{3}-{4}' -f $hashText.Substring(0, 8), $hashText.Substring(8, 4), $hashText.Substring(12, 4), $hashText.Substring(16, 4), $hashText.Substring(20, 12) $packageId = $null if ($InputObject.PSObject.Properties['PackageID']) { $packageId = $InputObject.PackageID } elseif ([string]$InputObject.UpdatePage -match '[?&]id=(\d+)') { $packageId = $Matches[1] } elseif ([string]$InputObject.FileName -match '^(sp\d+)') { $packageId = $Matches[1] } elseif ([string]$InputObject.FileName -match '-([A-Za-z0-9]+)_Win(?:10|11)') { $packageId = $Matches[1] } $osBuild = $null if ($InputObject.PSObject.Properties['OSBuild']) { $osBuild = $InputObject.OSBuild } elseif ([string]$InputObject.FileName -match 'Win(?:10|11)_(\d{5})') { $osBuild = $Matches[1] } $osReleaseId = $null if ($InputObject.PSObject.Properties['OSVersion']) { $osReleaseId = $InputObject.OSVersion } elseif ($osBuild) { $osReleaseId = switch ([string]$osBuild) { '22000' { '21H2' } '22621' { '22H2' } '22631' { '23H2' } '26100' { '24H2' } '26200' { '25H2' } '26300' { '26H2' } '28000' { '26H1' } default { $null } } } [PSCustomObject][Ordered]@{ CatalogVersion = $InputObject.CatalogVersion Status = if ($InputObject.PSObject.Properties['Status']) { $InputObject.Status } else { $null } ReleaseDate = $InputObject.ReleaseDate Manufacturer = $InputObject.Manufacturer Model = $InputObject.Model Legacy = if ($InputObject.PSObject.Properties['Legacy']) { $InputObject.Legacy } else { $null } Product = $InputObject.SystemId Name = $InputObject.Name PackageID = $packageId FileName = $InputObject.FileName Url = $InputObject.Url OS = "$($InputObject.OperatingSystem) x64" OSReleaseId = $osReleaseId OSBuild = $osBuild OSArchitecture = $InputObject.OSArchitecture HashMD5 = $InputObject.HashMD5 Guid = $guid } } end { Write-Verbose "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)] End" } } |