You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell构建版本管理:实现版本号自动递增与外部文件更新需求问询

我帮你梳理了完整的解决方案,涵盖外部版本文件的读写、版本号递增逻辑,以及和你现有ChooseVersion函数的整合。下面是分步实现细节:

1. 准备外部版本存储文件

先创建一个VersionStore.ps1文件(路径可根据实际需求调整),用来持久化存储版本变量,格式沿用你给出的PowerShell变量形式,方便脚本直接加载:

# VersionStore.ps1
$ReleaseVersion1 = "8.5.34.31.4"
$ReleaseVersion2 = "8.5.34.35.4"
$ReleaseVersion3 = "8.6.22.607.8"
$ReleaseVersion4 = "8.6.22.2000.8"
2. 添加版本读写辅助函数

这两个函数负责从外部文件加载版本数据,以及将更新后的版本写回文件,确保其他版本变量不受影响:

# 加载外部版本文件,返回包含所有ReleaseVersion变量的哈希表
function Load-VersionStore {
    param(
        [string]$Path
    )
    # 使用dot source将外部文件的变量导入当前会话
    . $Path
    return @{
        ReleaseVersion1 = $ReleaseVersion1
        ReleaseVersion2 = $ReleaseVersion2
        ReleaseVersion3 = $ReleaseVersion3
        ReleaseVersion4 = $ReleaseVersion4
    }
}

# 将更新后的版本写入外部文件
function Save-VersionStore {
    param(
        [string]$Path,
        [hashtable]$UpdatedVersions
    )
    $content = Get-Content -Path $Path -Raw
    # 遍历需要更新的变量,用正则精准替换对应行
    foreach ($key in $UpdatedVersions.Keys) {
        $oldValue = [regex]::Escape((Get-Variable -Name $key -ValueOnly))
        $newValue = [regex]::Escape($UpdatedVersions[$key])
        $content = $content -replace "`$$key = `"$oldValue`"", "`$$key = `"$newValue`""
    }
    Set-Content -Path $Path -Value $content -Force
}
3. 修改ChooseVersion函数,整合递增逻辑

更新你原有的函数,让它从外部加载版本、处理用户选择、完成版本号递增并保存:

function ChooseVersion() {
    # 替换为你的实际版本存储文件路径
    $versionStorePath = "C:\YourScriptPath\VersionStore.ps1"
    # 替换为你的实际共享驱动器路径
    $SharedDriveFolderPath = "\\YourSharedDrive\Path"

    # 加载外部版本数据
    $versionStore = Load-VersionStore -Path $versionStorePath

    # 构建版本列表(从外部加载版本,不再硬编码)
    $Versions = @()
    $Versions += "ReleaseVersion;Sourceversion;Versionlocationforpatches;Versionlocationforcabs;LinkForVersion;VersionNumber;buildver;PipelineID;xmlFilePath;ReleaseBuildVer"
    $Versions += "$($versionStore.ReleaseVersion1);$SharedDriveFolderPath\Versions\8.5.34.31;$SharedDriveFolderPath\Versions\8.5.34.31\Installer\Patches;$SharedDriveFolderPath\Versions\8.5.34.31\Installer;\\bandit.com\global\builds\Releases\RingOne Builds\8.5 RingOne\$($versionStore.ReleaseVersion1);8.5.34.31;8.5.34.31;18710;$SharedDriveFolderPath\Versions\8.5.34.31\BuildDescription.xml;$($versionStore.ReleaseVersion1)"
    $Versions += "$($versionStore.ReleaseVersion2);$SharedDriveFolderPath\Versions\8.5.34.35;$SharedDriveFolderPath\Versions\8.5.34.35\Installer\Patches;$SharedDriveFolderPath\Versions\8.5.34.35\Installer;\\bandit.com\global\builds\Releases\RingOne Builds\8.5 RingOne\$($versionStore.ReleaseVersion2);8.5.34.35_Federal;8.5.34.35;18713;$SharedDriveFolderPath\Versions\8.5.34.35\BuildDescription.xml;$($versionStore.ReleaseVersion2)"
    $Versions += "$($versionStore.ReleaseVersion3);$SharedDriveFolderPath\Versions\8.6.22.607;$SharedDriveFolderPath\Versions\8.6.22.607\Installer\Patches;$SharedDriveFolderPath\Versions\8.6.22.607\Installer;\\bandit.com\global\builds\Releases\RingOne Builds\8.6 RingOne\$($versionStore.ReleaseVersion3);8.6.22.607;8.6.22.607;18650;$SharedDriveFolderPath\Versions\8.6.22.607\BuildDescription.xml;$($versionStore.ReleaseVersion3)"
    $Versions += "$($versionStore.ReleaseVersion4);$SharedDriveFolderPath\Versions\8.6.22.2000;$SharedDriveFolderPath\Versions\8.6.22.2000\Installer\Patches;$SharedDriveFolderPath\Versions\8.6.22.2000\Installer;\\bandit.com\global\builds\Releases\RingOne Builds\8.6 RingOne\$($versionStore.ReleaseVersion4);8.6.22.2000_Federal;8.6.22.2000;18667;$SharedDriveFolderPath\Versions\8.6.22.2000\BuildDescription.xml;$($versionStore.ReleaseVersion4)"
    $Versions = $Versions | ConvertFrom-CSV -Del ";"

    # 让用户选择目标版本
    do {
        $VersionToUse = $Versions.VersionNumber | Out-Gridview -Title "Choose version for initialization" -PassThru 
    } while ($Versions.VersionNumber -notcontains $VersionToUse)

    # 匹配选中版本对应的ReleaseVersion变量和值
    $selectedReleaseVersion = ($Versions | Where-Object {$_.VersionNumber -eq $VersionToUse}).ReleaseVersion
    $versionVariableName = $versionStore.GetEnumerator() | Where-Object {$_.Value -eq $selectedReleaseVersion} | Select-Object -ExpandProperty Key

    # 版本号递增:拆分最后一位数字加1,重新拼接
    $versionParts = $selectedReleaseVersion -split "\."
    $lastPart = [int]$versionParts[-1]
    $versionParts[-1] = ($lastPart + 1).ToString()
    $newReleaseVersion = $versionParts -join "."

    # 更新版本存储并写入外部文件
    Save-VersionStore -Path $versionStorePath -UpdatedVersions @{$versionVariableName = $newReleaseVersion}

    # 原有变量赋值逻辑,替换为递增后的版本值
    $Versionlocationforpatches = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).Versionlocationforpatches
    $Versionlocationforcabs = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).Versionlocationforcabs
    $ReleaseVersion = $newReleaseVersion
    $Sourceversion = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).Sourceversion
    $LinkForVersion = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).LinkForVersion -replace $selectedReleaseVersion, $newReleaseVersion
    $VersionNumber = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).VersionNumber
    $buildver = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).buildver
    $PipelineID = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).PipelineID
    $xmlFilePath = ($Versions | where {$_.VersionNumber -eq $VersionToUse}).xmlFilePath
    $ReleaseBuildVer = $newReleaseVersion

    Write-host "You decided to initialize parameters for version '$VersionToUse'" -ForegroundColor Cyan
    Write-host "Updated release version to: $newReleaseVersion" -ForegroundColor Green
}
4. 关键逻辑说明
  • 版本加载:通过dot source操作将外部文件的变量导入脚本会话,同时用哈希表存储便于快速查找。
  • 版本匹配:当用户选中8.6.22.607时,会自动关联到$ReleaseVersion3变量(因为其值为8.6.22.607.8)。
  • 递增逻辑:拆分版本号为数组,将最后一位转为整数加1后重新拼接,确保版本号格式不变。
  • 文件写入:用正则精准替换目标变量的行,保证其他版本数据不受修改影响。

内容的提问来源于stack exchange,提问作者Bandit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:42:49