Private/Get-Version.ps1
function Get-Version { <# .SYNOPSIS Extracts a version number from either a string or the content of a web page using a chosen or pre-defined match pattern. .DESCRIPTION Extracts a version number from either a string or the content of a web page using a chosen or pre-defined match pattern. .NOTES Site: https://packageology.com Author: Dan Gough Twitter: @packageologist .LINK https://github.com/DanGough/Nevergreen .PARAMETER String The string to process. .PARAMETER Uri The Uri to load web content from to process. .PARAMETER Pattern Optional RegEx pattern to use for version matching. .PARAMETER ReplaceWithDot Switch to automatically replace characters - or _ with . in detected version. .EXAMPLE Get-Version -String 'http://somewhere.com/somefile_1.2.3.exe' Description: Returns '1.2.3' #> [CmdletBinding(SupportsShouldProcess = $False)] param ( [Parameter( Mandatory = $true, Position = 0, ValueFromPipeline = $true, ParameterSetName = 'String')] [ValidateNotNullOrEmpty()] [String[]] $String, [Parameter( Mandatory = $true, ParameterSetName = 'Uri')] [ValidatePattern('^(http|https)://')] [String[]] $Uri, [Parameter( Mandatory = $false, Position = 1)] [ValidateNotNullOrEmpty()] [String] $Pattern = '((?:\d+\.)+\d+)', [Switch] $ReplaceWithDot ) begin { if ($PsCmdlet.ParameterSetName -eq 'Uri') { $ProgressPreference = 'SilentlyContinue' foreach ($CurrentUri in $Uri) { try { $String += (Invoke-WebRequest -Uri $CurrentUri -DisableKeepAlive -UseBasicParsing).Content } catch { Write-Error "Unable to query URL '$CurrentUri': $($_.Exception.Message)" } } } } process { foreach ($CurrentString in $String) { if ($CurrentString -match $Pattern) { if ($ReplaceWithDot) { $matches[1].Replace('-','.').Replace('_','.') } else { $matches[1] } } else { Write-Warning "No version found within $CurrentString using pattern $Pattern" } } } end { } } |