Private/WinGet/Get-IntuneWinPackageMetadata.ps1

function Get-IntuneWinPackageMetadata {
    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$IntuneWinPath
    )

    Add-Type -AssemblyName System.IO.Compression.FileSystem

    $archive = [System.IO.Compression.ZipFile]::OpenRead($IntuneWinPath)
    try {
        $detectionXmlEntry = $archive.Entries |
            Where-Object { $_.FullName -match 'Detection\.xml$' } |
            Select-Object -First 1

        if (-not $detectionXmlEntry) {
            throw "Detection.xml not found in package '$IntuneWinPath'."
        }

        $metadataStream = $detectionXmlEntry.Open()
        $reader = [System.IO.StreamReader]::new($metadataStream)
        try {
            [xml]$metadataXml = $reader.ReadToEnd()
        } finally {
            $reader.Dispose()
            $metadataStream.Dispose()
        }

        $encryptionInfo = $metadataXml.ApplicationInfo.EncryptionInfo
        return [PSCustomObject]@{
            FileName             = [string]$metadataXml.ApplicationInfo.FileName
            SetupFile            = [string]$metadataXml.ApplicationInfo.SetupFile
            UnencryptedSize      = [int64]$metadataXml.ApplicationInfo.UnencryptedContentSize
            EncryptionKey        = [string]$encryptionInfo.EncryptionKey
            MacKey               = [string]$encryptionInfo.MacKey
            InitializationVector = [string]$encryptionInfo.InitializationVector
            Mac                  = [string]$encryptionInfo.Mac
            ProfileIdentifier    = [string]$encryptionInfo.ProfileIdentifier
            FileDigest           = [string]$encryptionInfo.FileDigest
            FileDigestAlgorithm  = [string]$encryptionInfo.FileDigestAlgorithm
        }
    } finally {
        $archive.Dispose()
    }
}