Удивительно, что тип System.Version
не поддерживает методы приращения компонентов номера версии (как и тип PowerShell Core-only System.Management.Automation.SemanticVersion
). ).
Вот решение для PSv5 +:
$versionString = '1.2.0'
$version = [version] $versionString
$versionStringIncremented = [string] [version]::new(
$version.Major,
$version.Minor,
$version.Build + 1
)
# $versionStringIncremented now contains '1.2.1'
Если вы хотите обернуть это в функцию , которая позволяет увеличивать любой из компонентов , устанавливая все нижние компоненты на 0
или, в случае .Revision
, на неопределенное значение (сообщается как -1
):
function Increment-Version {
param(
[Parameter(Mandatory)]
[version] $Version
,
[ValidateSet('Major', 'Minor', 'Build', 'Revision')]
[string] $Component = 'Revision'
)
$useRevision = $Version.Revision -ne -1 -or $Component -eq 'Revision'
$Major, $Minor, $Build, $Revision =
$Version.Major, $Version.Minor, $Version.Build, $Version.Revision
switch ($Component) {
'Major' { $Minor = $Build = 0 }
'Minor' { $Build = 0 }
}
Set-Variable $Component (1 + (Get-Variable -ValueOnly $Component))
if ($useRevision) {
[version]::new(
$Major,
$Minor,
$Build,
$Revision
)
} else {
[version]::new(
$Major,
$Minor,
$Build
)
}
}
Тогда ваша команда упростится до:
# -> '1.2.1'
$versionStringIncremented = [string] (Increment-Version 1.2.0 -Component Build)
# -> '1.3.0'
$versionStringIncremented = [string] (Increment-Version 1.2.7 -Component Minor)