Private/WinGet/Get-WinGetRemediationDefinition.ps1

function Get-WinGetRemediationDefinition {
    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory)]
        [ValidateSet('system', 'user')]
        [string]$Scope,

        [Parameter(Mandatory)]
        [psobject[]]$TemplateSet
    )

    $packageScope = if ($Scope -eq 'system') { 'machine' } else { 'user' }
    $packageIdentifiers = @(
        $TemplateSet |
            Where-Object { [string]$_.package.match.scope -eq $packageScope } |
            ForEach-Object { [string]$_.packageIdentifier } |
            Where-Object { -not [string]::IsNullOrWhiteSpace($_) } |
            Sort-Object -Unique
    )

    return [PSCustomObject]@{
        Scope              = $Scope
        DisplayName        = "WinGet App Updates ($([cultureinfo]::InvariantCulture.TextInfo.ToTitleCase($Scope)))"
        RunAsAccount       = if ($Scope -eq 'system') { 'system' } else { 'user' }
        PackageIdentifiers = $packageIdentifiers
        Description        = if ($packageIdentifiers.Count -gt 0) { New-WinGetRemediationDescription -Scope $Scope -PackageIdentifiers $packageIdentifiers } else { $null }
    }
}