Private/Test-VersionEquality.ps1
|
function Test-VersionEquality { <# .SYNOPSIS Compare two versions by casting and comparing individual components. .DESCRIPTION Return $true when two version strings represent the same version. Equality is the zero case of the shared Compare-Version ordering primitive, which tries SemanticVersion first (honouring pre-release labels), falls back to a normalised System.Version (so 1.2.3 equals 1.2.3.0), and finally to an ordinal string comparison. Null or empty inputs are never equal. .PARAMETER ReferenceVersion The reference version string to compare against. .PARAMETER DifferenceVersion The version string to compare with the reference version. .EXAMPLE Test-VersionEquality -ReferenceVersion '1.2.3' -DifferenceVersion '1.2.3' Returns true for identical three-part versions. .EXAMPLE Test-VersionEquality -ReferenceVersion '1.2.0' -DifferenceVersion '1.2' Returns true when both omit build (treated as 0). .EXAMPLE Test-VersionEquality -ReferenceVersion '1.2.3' -DifferenceVersion '1.2.4' Returns false when build differs. #> [CmdletBinding()] [OutputType([bool])] param( [string]$ReferenceVersion, [string]$DifferenceVersion ) # First, check if either version string is null or empty. If so, they can't # be equal. if ( [string]::IsNullOrEmpty($ReferenceVersion) -or [string]::IsNullOrEmpty($DifferenceVersion) ) { return $false } # Equality is the zero case of the shared ordering primitive. Compare-Version # handles SemanticVersion, normalised System.Version, and string fallback. return (Compare-Version -ReferenceVersion $ReferenceVersion -DifferenceVersion $DifferenceVersion) -eq 0 } |