如何在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
相关产品推荐
相关产品推荐

