The SemVerPS PowerShell module offers the ability to work with Semantic Version utilizing the .net implementation from Max Hauser’s SemVer repository. With this module, it is possible to:

  • Work with Semantic Version as typed object leveraging or comparison operators
  • Enhance object with a NoteProperty that contains a Semantic Version.
  • Filter and/or test above enhanced list of objects.
    • This could be very useful if for example a list of items is retrieved where part of the name is a semantic version and we want to filter the list.

Basic usage with ConvertTo-SemVer

Use the ConvertTo-SemVer to convert strings to semantic version objects. For example:

ConvertTo-SemVer -Version "1.0.0"
Major      : 1
Minor      : 0
Patch      : 0
Prerelease : 
Build      : 
ConvertTo-SemVer -Version "1.0.1-alpha+1" -Strict
Major      : 1
Minor      : 0
Patch      : 1
Prerelease : alpha
Build      : 1

Use the Test-SemVer to test if a string or a semantic version is stable or prerelease. For example:

Test-SemVer -InputObject "1.0.0"
#True

Test-SemVer -InputObject "1.0.0" -Stable
#True

Test-SemVer -InputObject "1.0.0-alpha+1" -PreRelease alpha
#True

Add semantic versioning member to existing objects

Often there is a need to attach a semantic version notation to an object or a list of objects. Use the Add-SemVerMember to add a member where the semantic version value is derived either from an expression or a script block. By default the semantic version is add to a property named SemVer but this can be changed by defining the Property parameter. For example:

[pscustomobject]@{Name="example-1.0.0"}|Add-SemVerMember -Expression 'Name.Replace("example-","")' -PassThru
[pscustomobject]@{Name="example-1.0.0"}|Add-SemVerMember -ScriptBlock {$_.Name.Replace("example-","")} -PassThru -Name "AnotherProperty"
Name          SemVer
----          ------
example-1.0.0 1.0.0


Name          AnotherProperty
----          ---------------
example-1.0.0 1.0.0


As an extension of the Test-SemVer, use the Limit-SemVer to filter objects based on semantic version conditions. Each object can be in the form of a string, or a semantic version instance or an object that has been enhanced with Add-SemVerMember. For example:

$versions=@(
    "1.0.0"
    "1.0.0-alpha+1"
)
$versions|Limit-SemVer -Stable
$versions|Limit-SemVer -Prerelease alpha
1.0.0

1.0.0-alpha+1
$objectsWithVersions=@(
    "example-1.0.0"
    "example-1.0.0-alpha+1"
)|Foreach-Object {
    [pscustomobject]@{Name=$_}| Add-SemVerMember -Expression 'Name.Replace("example-","")' -PassThru  
}
$objectsWithVersions
$objectsWithVersions|Limit-SemVer -Stable
$objectsWithVersions|Limit-SemVer -Prerelease alpha
Name          SemVer
----          ------
example-1.0.0 1.0.0

Name                  SemVer
----                  ------
example-1.0.0-alpha+1 1.0.0-alpha+1

Leave a Comment