Find-PowerShellSupportStatus.ps1
<#
.SYNOPSIS Find PowerShell support status. #> function Find-PowerShellSupportStatus { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Default', Mandatory = $false)] [SemVer]$Version, [Parameter(ParameterSetName = 'ExcludeEOS', Mandatory = $true)] [Switch]$ExcludeEOS ) begin { # validate parameters $_AbortProcess = $false switch ($PSCmdlet.ParameterSetName) { 'Default' { if ( $Version -and ($Version.PreReleaseLabel -or $Version.BuildLabel)) { Write-Error ($Messages.Find_PowerShellSupportStatus_001 -f $Version) $_AbortProcess = $true return } } } } process { if ($_AbortProcess) { $objectsForOutput = @() return } # Get PowerShell EOS information try { # Use endoflife.date raw data to get PowerShell EOS. Write-Verbose 'Request to https://raw.githubusercontent.com/endoflife-date/release-data/main/releases/powershell.json' $eols = Invoke-RestMethod -Uri https://raw.githubusercontent.com/endoflife-date/release-data/main/releases/powershell.json } catch { Write-Error 'Failed to get PowerShell EOS information.' return $null } # Create PowerShellEOS objects $objectsForOutput = [System.Collections.ArrayList]::new() foreach ($r in $eols.releases.PSObject.Properties.Name) { $obj = [PowerShellSupportStatus]::new() $obj.Version = [semver]$r $obj.EOSDate = [datetime]::Parse($eols.releases.$r.eol) # filter objcets if ($PSCmdlet.ParameterSetName -eq 'Default') { if ($Version -and -not ($Version.Major -eq $obj.Version.Major -and $Version.Minor -eq $obj.Version.Minor)) { Write-Verbose "-Version filter excludes version $($obj.Version)" continue } } if ($PSCmdlet.ParameterSetName -eq 'ExcludeEOS') { if ($obj.IsEOS() -eq $ExcludeEOS) { Write-Verbose "-ExcludeEOS filter excludes version $($obj.Version)" continue } } [void]$objectsForOutput.Add($obj) } } end { switch ($objectsForOutput.Count) { 0 { # do nothing } 1 { $objectsForOutput[0] } Default { $objectsForOutput | Sort-Object -Property Version -Descending } } } } |