Private/SKU/Get-SkuRetirementInfo.ps1

function Get-SkuRetirementInfo {
    param([string]$SkuName)

    # Azure VM series retirement data from official Microsoft announcements
    # https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/retirement/retired-sizes-list
    # Last verified: 2026-04-23
    $retirementLookup = @(
        # Already retired
        @{ Pattern = '^Standard_H\d+[a-z]*$';          Series = 'H';       RetireDate = '2024-09-28'; Status = 'Retired' }
        @{ Pattern = '^Standard_HB60rs$';              Series = 'HBv1';    RetireDate = '2024-09-28'; Status = 'Retired' }
        @{ Pattern = '^Standard_HC44rs$';              Series = 'HC';      RetireDate = '2024-09-28'; Status = 'Retired' }
        @{ Pattern = '^Standard_NC\d+r?$';             Series = 'NCv1';    RetireDate = '2023-09-06'; Status = 'Retired' }
        @{ Pattern = '^Standard_NC\d+r?s_v2$';         Series = 'NCv2';    RetireDate = '2023-09-06'; Status = 'Retired' }
        @{ Pattern = '^Standard_NC\d+r?s_v3$';         Series = 'NCv3';    RetireDate = '2025-09-30'; Status = 'Retired' }
        @{ Pattern = '^Standard_ND\d+r?s$';            Series = 'NDv1';    RetireDate = '2023-09-06'; Status = 'Retired' }
        @{ Pattern = '^Standard_NV\d+$';               Series = 'NVv1';    RetireDate = '2023-09-06'; Status = 'Retired' }
        @{ Pattern = '^Standard_ND\d+r?s_v2$';         Series = 'NDv2';    RetireDate = '2025-09-30'; Status = 'Retired' }
        @{ Pattern = '^(Basic_A\d+|Standard_A\d+)$';  Series = 'Av1';     RetireDate = '2024-08-31'; Status = 'Retired' }
        # Scheduled for retirement (announced, planned retirement date)
        @{ Pattern = '^Standard_DS?\d+$';              Series = 'Dv1';     RetireDate = '2028-05-01'; Status = 'Retiring' }
        @{ Pattern = '^Standard_DS?\d+_v2(_Promo)?$';  Series = 'Dv2';     RetireDate = '2028-05-01'; Status = 'Retiring' }
        @{ Pattern = '^Standard_A\d+m?_v2$';           Series = 'Av2';     RetireDate = '2028-11-15'; Status = 'Retiring' }
        @{ Pattern = '^Standard_B\d+[a-z]*$';          Series = 'Bv1';     RetireDate = '2028-11-15'; Status = 'Retiring' }
        @{ Pattern = '^Standard_GS?\d+$';              Series = 'G/GS';    RetireDate = '2028-11-15'; Status = 'Retiring' }
        @{ Pattern = '^Standard_F\d+s?$';              Series = 'Fsv1';    RetireDate = '2028-11-15'; Status = 'Retiring' }
        @{ Pattern = '^Standard_F\d+s_v2$';            Series = 'Fsv2';    RetireDate = '2028-11-15'; Status = 'Retiring' }
        @{ Pattern = '^Standard_L\d+s$';               Series = 'Lsv1';    RetireDate = '2028-05-01'; Status = 'Retiring' }
        @{ Pattern = '^Standard_L\d+s_v2$';            Series = 'Lsv2';    RetireDate = '2028-11-15'; Status = 'Retiring' }
        @{ Pattern = '^Standard_M192i[a-z]*_v2$';      Series = 'M192iv2'; RetireDate = '2027-03-31'; Status = 'Retiring' }
        @{ Pattern = '^Standard_NV\d+s_v3$';           Series = 'NVv3';    RetireDate = '2026-09-30'; Status = 'Retiring' }
        @{ Pattern = '^Standard_NV\d+[a-z]*_v4$';      Series = 'NVv4';    RetireDate = '2026-09-30'; Status = 'Retiring' }
        @{ Pattern = '^Standard_NP\d+s$';              Series = 'NP';      RetireDate = '2027-05-31'; Status = 'Retiring' }
        @{ Pattern = '^Standard_M\d+(-\d+)?[a-z]*$';   Series = 'Mv1';     RetireDate = '2027-08-31'; Status = 'Retiring' }
    )

    foreach ($entry in $retirementLookup) {
        if ($SkuName -match $entry.Pattern) {
            return $entry
        }
    }
    return $null
}