Public/Compare-Version.ps1
function Compare-Version { <# .SYNOPSIS Compare version numbers .DESCRIPTION Compare the specified version numbers .PARAMETER Version The version parameter corresponds to the version number to test. .PARAMETER Operator The operator parameter corresponds to the type of comparison to operate. .PARAMETER Reference The reference parameter corresponds to the reference version number to compare the specified version against. .PARAMETER Format The format parameter corresponds to the format of the numbering. .NOTES File name: Compare-Version.ps1 Author: Florian Carrier Creation date: 19/10/2019 Last modified: 19/10/2019 #> [CmdletBinding ( SupportsShouldProcess = $true )] Param ( [Parameter ( Position = 1, Mandatory = $true, HelpMessage = "Version number to test" )] [ValidateNotNullOrEmpty()] [String] $Version, [Parameter ( Position = 1, Mandatory = $true, HelpMessage = "Comparison operator" )] [ValidateSet ( "eq", # Equals "ne", # Not equals "gt", # Greater than "ge", # Greater than or equal "lt", # Less than "le" # Less than or equal )] [String] $Operator, [Parameter ( Position = 3, Mandatory = $true, HelpMessage = "Reference version number to check against" )] [ValidateNotNullOrEmpty()] [String] $Reference, [Parameter ( Position = 4, Mandatory = $false, HelpMessage = "Numbering format" )] [ValidateSet ( "modified", "semantic" )] [String] $Format = "semantic" ) Begin { # Get global preference vrariables Get-CallerPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState } Process { switch ($Format) { "semantic" { # Prepare version numbers for comparison try { $VersionNumber = [System.Version]::Parse($Version) } catch [FormatException] { Write-Log -Type "ERROR" -Object "The version number ""$Version"" does not match $Format numbering" return $false } try { $ReferenceNumber = [System.Version]::Parse($Reference) } catch [FormatException] { Write-Log -Type "ERROR" -Object "The version number ""$Reference"" does not match $Format numbering" return $false } # Build comparison command $Command = """$VersionNumber"" -$Operator ""$ReferenceNumber""" Write-Log -Type "DEBUG" -Object $Command # Execute comparison $Result = Invoke-Expression -Command $Command # Return comparison result return $Result } "modified" { if ($Operator -in ("eq", "ne")) { # Build comparison command $Command = """$Version"" -$Operator ""$Reference""" Write-Log -Type "DEBUG" -Object $Command # Execute comparison $Result = Invoke-Expression -Command $Command # Return comparison result return $Result } else { # Parse version numbers $VersionNumbers = $Version.Split(".") $ReferenceNumbers = $Reference.Split(".") # Check comparison operator if ($Operator -in ("gt", "ge")) { # TODO implement # for ($i = 0; $i -lt $Count; $i++) { # if ($i -lt ($Count - 1)) { # $Command = """$($VersionNumbers[$i])"" -ge ""$($ReferenceNumbers[$i])""" # } else { # $Command = """$($VersionNumbers[$i])"" -Operator ""$($ReferenceNumbers[$i])""" # } # Write-Log -Type "DEBUG" -Object $Command # $Result = Invoke-Expression -Command $Command # if ($Result -eq $false) { # return $false # } # } } elseif ($Operator -in ("lt", "le")) { # TODO implement } } } default { Write-Log -Type "ERROR" -Object "The $Format versionning format is not yet supported" return $false } } } } |