Public/Get-BcReleaseWaveFeature.ps1

function Get-BcReleaseWaveFeature
{
    param
    (
        [Parameter(Mandatory, Position = 0)]
        [string]$Wave
    )

    $EnUsCulture = Get-Culture 'en-US'

    $Url = "https://learn.microsoft.com/en-us/dynamics365/release-plan/$Wave/smb/dynamics365-business-central/planned-features"
    if ($Wave -lt '2023wave1') { $Url = "https://learn.microsoft.com/en-us/dynamics365-release-plan/$Wave/smb/dynamics365-business-central/planned-features" }
    $BaseUrl = $Url -replace 'planned-features$', ''

    Write-Verbose "Url is $Url"

    $Document = ConvertTo-HtmlDocument -Uri $Url
    $Sections = $Document | Select-HtmlNode -CssSelector 'h2:not(.title)' -All | ForEach-Object { $_ | Get-HtmlNodeText }
    $Tables = $Document | Select-HtmlNode -CssSelector 'table' -All

    0..($Sections.Length - 1) | ForEach-Object {
        $Section = $Sections[$_]
        $Table = $Tables[$_]
        $Rows = $Table | Select-HtmlNode -CssSelector 'tr' -All

        $Rows.ForEach{
            $Cells = $_ | Select-HtmlNode -CssSelector 'td' -All

            if ($Cells)
            {
                $Feature = $Cells[0] | Get-HtmlNodeText
                $Link = ($Cells[0] | Select-HtmlNode -CssSelector 'a').GetAttributeValue('href', '')
                $EnabledFor = $Cells[1] | Get-HtmlNodeText
                $PublicPreviewText = $Cells[2] | Get-HtmlNodeText
                $GeneralAvailabilityText = $Cells[3] | Get-HtmlNodeText
                [nullable[datetime]]$PublicPreview = $null
                [nullable[datetime]]$GeneralAvailability = $null

                $Dummy = [DateTime]::MinValue
                if ([DateTime]::TryParseExact($PublicPreviewText, 'MMM d, yyyy', $EnUsCulture, [System.Globalization.DateTimeStyles]::None, [ref]$Dummy))
                {
                    $PublicPreview = $Dummy
                }

                $Dummy = [DateTime]::MinValue
                if ([DateTime]::TryParseExact($GeneralAvailabilityText, 'MMM d, yyyy', $EnUsCulture, [System.Globalization.DateTimeStyles]::None, [ref]$Dummy))
                {
                    $GeneralAvailability = $Dummy
                }

                [PSCustomObject]@{
                    PSTypeName              = 'UncommonSense.BcReleaseWaveFeature'
                    Wave                    = $Wave
                    Section                 = $Section
                    Feature                 = $Feature
                    Link                    = "$($BaseUrl)$($Link)"
                    EnabledFor              = $EnabledFor
                    PublicPreviewText       = $PublicPreviewText
                    GeneralAvailabilityText = $GeneralAvailabilityText
                    PublicPreview           = $PublicPreview
                    GeneralAvailability     = $GeneralAvailability
                }
            }
        }
    }
}