Public/Show-WinEOLProductReleaseInfo.ps1

function Show-WinEOLReleaseInfo {
    <#
    .SYNOPSIS
    Displays the release information for the product (nested view).
 
    .DESCRIPTION
    This function retrieves and displays the release information for the product.
    It includes details such as version, release date, and any relevant notes.
 
    .PARAMETER ProductWithReleaseInfo
    The product information in PSObject format that contains release details.
 
    .EXAMPLE
    PS> Get-WinEOLAllProducts | Where-Object Name -like "*windows*" | Show-WinEOLReleaseInfo
    #>


    [CmdletBinding()]
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [ValidateScript({
                'WinEOL.ProductInfoWithReleases' -in $_.PSTypeNames
            })]
        [object[]]$ProductWithReleaseInfo
    )

    Begin {}

    Process {
        foreach ($product in $ProductWithReleaseInfo) {
            foreach ($release in $product.releases) {

                # Expand out the latest release information, so all properties are available
                $lastestName = $release.latest.name
                $latestDate = $release.latest.date
                $latestLink = $release.latest.link

                $releaseInfo = [PSCustomObject]@{
                    PSTypeName   = "WinEOL.ProductInfo"
                    ProductName  = $product.name
                    ProductLabel = $product.label
                    Name         = $release.name
                    codename     = $release.codename
                    label        = $release.label
                    ReleaseDate  = $release.releaseDate
                    isLts        = $release.isLts
                    ltsFrom      = $release.ltsFrom
                    isEoas       = $release.isEoas
                    eoasFrom     = $release.eoasFrom
                    isEol        = $release.isEol
                    eolFrom      = $release.eolFrom
                    isMaintained = $release.isMaintained
                    latestName   = $lastestName
                    latestDate   = $latestDate
                    latestLink   = $latestLink
                }
                
                # Add calculated properties for compatibility with new format
                $eolDate = $null
                $days = 0
                $statusStr = "Active"
                if ($release.eol -as [DateTime]) {
                    $eolDate = [DateTime]$release.eol
                    $days = ($eolDate - (Get-Date)).Days
                    if ($days -lt 0) { $statusStr = "EOL" }
                    elseif ($days -le 60) { $statusStr = "NearEOL" }
                }
                $releaseInfo | Add-Member -NotePropertyName "DaysRemaining" -NotePropertyValue $days
                $releaseInfo | Add-Member -NotePropertyName "Status" -NotePropertyValue $statusStr

                $releaseInfo
            }
        }
    }

    End {}
}