如何在PowerShell中通过WinGet对比已安装与可用软件版本并返回退出码
用PowerShell对比WinGet已安装版本与可用版本并返回退出码
完全可以实现,下面是适配Intune检测场景的PowerShell脚本,专门处理7-Zip的版本对比需求:
# 获取7-Zip的WinGet清单数据(JSON格式,便于结构化解析) $wingetOutput = winget list --name "7-Zip" --json | ConvertFrom-Json # 过滤出目标应用条目 $app = $wingetOutput | Where-Object { $_.Name -match "7-Zip" } # 处理应用未安装的情况 if (-not $app) { Write-Host "7-Zip未安装" exit 1 # 未安装也触发修复(可根据需求调整为exit 0) } # 提取已安装版本与可用版本 $installedVersion = [version]$app.Version $availableVersion = [version]$app.Available # 对比版本号 if ($availableVersion -gt $installedVersion) { Write-Host "发现可用更新:当前版本$installedVersion,可用版本$availableVersion" exit 1 # 存在更新,触发Intune修复 } else { Write-Host "当前版本已是最新:$installedVersion" exit 0 # 无更新,无需修复 }
关键细节说明:
- 选用
--json参数获取WinGet输出:相比纯文本格式,JSON结构更稳定,避免因WinGet版本更新导致的文本解析失效问题,更适合生产环境的Intune脚本 - 版本号类型转换:通过
[version]将版本字符串转换为PowerShell版本对象,实现安全的大小对比(自动处理多段版本号,比如19.00vs22.01) - 退出码逻辑:
exit 1:触发Intune修复流程(对应存在可用更新或应用未安装的情况)exit 0:无需修复(当前版本为最新)
- 可扩展性:将
"7-Zip"替换为其他应用名称,即可适配其他软件的版本检测需求
内容的提问来源于stack exchange,提问作者Batteredburrito
相关产品推荐
相关产品推荐

