Public/Get-SDCProductInfo.ps1

function Get-SDCProductInfo {
    <#
    .SYNOPSIS
        Retrieves a list of products.
 
    .DESCRIPTION
        This function fetches a list of products from the endoflife.date API and returns it as a PowerShell object.
        Uses either the /products/{productName} endpoint to retrieve specific product information or the /products/{productName}/releases/latest endpoint to get the latest release information.
 
    .EXAMPLE
        Get-SDCProductList
 
    .NOTES
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$ProductName,

        [switch]$Latest
    )

    if ($Latest) {
        $url = "https://endoflife.date/api/v1/products/$($ProductName)/releases/latest"
    }
    else {
        $url = "https://endoflife.date/api/v1/products/$($ProductName)"
    }

    try {
        $product = Invoke-RestMethod -Uri $url -ErrorAction Stop
    }
    catch {
        Write-Error "Failed to retrieve product information for '$ProductName'. Error: $_"
        return
    }
    if ($null -eq $product) {
        Write-Error "No product found with the name '$ProductName'."
        return
    }


    # Convert the product information to a PowerShell object
    $productReleaseInfo = [System.Collections.Generic.List[PSCustomObject]]::new()

    foreach($release in $product.result.releases) {
        $relObj = [PSCustomObject]@{
            Release = $release.name
            Released = $release.releaseDate
            OutOfActiveSupport = $release.isEoas
            ActiveSupportEnds = $release.eoasFrom
            EndOfLife = $release.isEol
            SecuritySupportEnds = $release.eolFrom
            Maintained = $release.isMaintained
            LatestBuild = $release.latest.name
            LatestBuildReleaseDate = $release.latest.date
            LatestBuildUrl = $release.latest.link
            IsLts = $release.isLts
            LtsFromDate = $release.ltsFrom
        }

        $productReleaseInfo.Add($relObj)
    }

    Write-Verbose "Product information for '$ProductName' retrieved successfully."
    $productReleaseInfo

}