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

如何在PowerShell中修改winget返回的版本号格式?

PowerShell 版本号格式化与管道输出解决方案

1. 修复版本号修改函数

直接通过字符串拆分重组实现版本号段交换,比操作CharArray更简洁可靠:

function ModifyVersionNumber {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline = $true)]
        [PSObject]$InputObject
    )

    process {
        if ($InputObject.Version) {
            $versionParts = $InputObject.Version -split '\.'
            if ($versionParts.Count -eq 4) {
                # 交换第三、第四段(索引从0开始)
                $temp = $versionParts[2]
                $versionParts[2] = $versionParts[3]
                $versionParts[3] = $temp
                $modifiedVersion = $versionParts -join '.'
                # 输出修改后的对象
                [PSCustomObject]@{
                    Name    = $InputObject.Name
                    Version = $modifiedVersion
                }
            } else {
                Write-Warning "版本号格式错误:$($InputObject.Version)"
                $InputObject
            }
        } else {
            Write-Warning "输入对象缺少Version属性"
            $InputObject
        }
    }
}

2. 完整流程示例(结合winget输出处理)

将ConvertFrom-FixedColumnTable转换后的对象,直接管道到上述函数即可:

# 替换为你的winget输出转换逻辑
$wingetResults = winget list | ConvertFrom-FixedColumnTable

# 去除ID字段,处理版本号并输出
$wingetResults | Select-Object Name, Version | ModifyVersionNumber

执行后会输出格式修正后的名称与版本号,比如原版本5.4.33676.0会变为5.4.0.33676。

关键说明

  • 函数通过ValueFromPipeline = $true支持管道输入,process块确保每个管道对象都被逐行处理
  • 用-split '\.'拆分版本号,避免操作字符数组的复杂逻辑,更易维护
  • 输出时重新构造自定义对象,保留原名称并替换修改后的版本号,保证管道后续可继续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:33:19