Public/Add-OpmWinGetScanResult.ps1

<#
.SYNOPSIS
  Add a WinGet scan result to a package on a PacKit application fragment.
 
.DESCRIPTION
  Appends a WinGet scan result (catalog package id, match score, vendor) to the
  WinGetScanResults collection of the package identified by -PackageId. The
  match score is stored as a double and serialised with six decimals
  (e.g. 0.95 -> "0.950000"), matching PacKit.
 
.EXAMPLE
  Add-OpmWinGetScanResult -Fragment $app -PackageId '{1B2C...}' -CatalogPackageId 'Acme.Reader' -MatchScore 0.95 -Vendor 'Acme'
#>

function Add-OpmWinGetScanResult {
    [CmdletBinding()]
    [OutputType('PacKit.WinGetScanResult')]
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [psobject] $Fragment,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string] $PackageId,

        [Parameter()] [string] $CatalogPackageId = '',
        [Parameter()] [double] $MatchScore = 0.0,
        [Parameter()] [string] $Vendor = '',

        [Parameter()] [switch] $PassThru
    )

    process {
        $target = ConvertTo-OpmCanonicalGuid -Value $PackageId
        $pkg = @($Fragment.Packages) | Where-Object { $_.PackageId -eq $target } | Select-Object -First 1
        if ($null -eq $pkg) {
            throw "No package with PackageId '$PackageId' was found on the fragment."
        }

        $scan = New-OpmWinGetScanResultObject
        $scan.CatalogPackageId = $CatalogPackageId
        $scan.MatchScore = $MatchScore
        $scan.Vendor = $Vendor

        $pkg.WinGetScanResults = @($pkg.WinGetScanResults) + $scan

        if ($PassThru) { return $scan }
    }
}