PowerShell中winget升级命令结果存变量后输出异常字符求助
解决Winget升级命令输出包含
- \ |进度字符的问题 问题原因
那些- \ |字符是Winget执行时输出的终端进度动画控制字符,用于展示升级过程的加载状态。即使添加了--silent参数,Winget仍可能将这些字符输出到流中,导致捕获的变量包含冗余内容。
解决方案
1. 禁用Winget进度动画(最优方案)
Winget自带--disable-progress参数,专门用于关闭进度动画输出,直接添加该参数即可消除特殊字符:
$upgradeResult = winget upgrade -u --id $($_.Id) --silent --accept-source-agreements --disable-progress
2. 合并输出流(处理错误流输出)
如果仍有异常内容,可能是Winget将部分信息写入了错误流,通过2>&1合并标准输出与错误输出,确保所有内容被正确捕获:
$upgradeResult = winget upgrade -u --id $($_.Id) --silent --accept-source-agreements --disable-progress 2>&1
3. 手动清理输出内容(兜底方案)
若上述方法无效,可对捕获的结果做字符串过滤,移除进度字符和空白行:
$upgradeResult = winget upgrade -u --id $($_.Id) --silent --accept-source-agreements 2>&1 | Out-String # 过滤特殊字符并保留非空文本行 $cleanedResult = $upgradeResult -replace '[-\\|]+', '' | Where-Object { $_ -match '\S' } Write-Host $cleanedResult
验证
修改后执行命令,$upgradeResult将仅保留纯文本信息(如"No available upgrade found..."),不会再出现进度动画的特殊字符。
内容的提问来源于stack exchange,提问作者Mujtaba
相关产品推荐
相关产品推荐

