Skip to content

PSSemVer

PSSemVer adds a Semantic Versioning 2.0.0 compatible [PSSemVer] class to PowerShell, plus the commands to create and convert it. Unlike the built-in [version] type, it understands prerelease labels, build metadata, and tag prefixes such as v1.2.3, and it compares versions using the precedence rules from the SemVer specification.

Installation

Install the module from the PowerShell Gallery:

Install-PSResource -Name PSSemVer
Import-Module -Name PSSemVer

Capabilities

Parse a version from a string, including prerelease, build metadata, and a tag prefix:

$version = New-PSSemVer -Version 'v1.2.3-alpha.1+001'
$version.Prefix        # v
$version.Major         # 1
$version.Prerelease    # alpha.1
$version.BuildMetadata # 001

Compare versions using SemVer precedence, so prereleases sort before their release:

[PSSemVer]'1.0.0-beta.2' -lt [PSSemVer]'1.0.0-beta.11'  # True
[PSSemVer]'1.0.0-rc.1' -lt [PSSemVer]'1.0.0'            # True

Bump a version in place, including the prerelease counter:

$version = New-PSSemVer -Version '1.2.3'
$version.BumpMinor()               # 1.3.0
$version.SetPrerelease('alpha')    # 1.3.0-alpha
$version.BumpPrereleaseNumber()    # 1.3.0-alpha.1

Convert values coming off the pipeline and sort them by SemVer precedence:

'1.0.0', '0.9.0', '1.0.0-rc.1' | ConvertTo-PSSemVer | Sort-Object
# 0.9.0
# 1.0.0-rc.1
# 1.0.0

Documentation

Documentation is published at psmodule.io/PSSemVer.

Use PowerShell help and command discovery for module details:

Get-Command -Module PSSemVer
Get-Help -Name New-PSSemVer -Examples