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

如何通过PowerShell获取Winget所有软件包的完整名称与ID?

解决Winget获取完整包名和ID的方案

核心问题

Winget默认的表格输出会根据控制台宽度截断长名称/ID,且编码处理易出问题。使用JSON格式输出是获取完整数据的关键——JSON是结构化数据,包含所有字段的完整值,不会出现截断或乱码。

具体步骤

  1. 获取所有包的完整JSON数据
    在PowerShell中执行以下命令,直接获取结构化的全量包数据:
# 创建临时目录(不存在则自动创建)
$tempDir = "$env:temp\download_winget"
if (-not (Test-Path -Path $tempDir)) {
    New-Item -Path $tempDir -ItemType Directory | Out-Null
}

# 拉取所有包并转为PowerShell可操作的JSON对象
$wingetPackages = winget search --all --accept-source-agreements --output json | ConvertFrom-Json
  • --all:明确搜索所有包,比.或空字符串的匹配逻辑更精准
  • --output json:输出结构化数据,彻底避免文本截断
  • ConvertFrom-Json:将JSON字符串转为PowerShell对象,方便后续字段筛选
  1. 提取Name和ID字段
    从JSON对象中直接筛选需要的字段:
$packageList = $wingetPackages | Select-Object Name, Id
  1. 导出到文件(可选)
  • 导出为CSV(适合用表格工具后续处理):
    $packageList | Export-Csv -Path "$tempDir\winget_packages.csv" -Encoding UTF8 -NoTypeInformation
    
  • 导出为文本文件(每行显示Name和ID):
    $packageList | ForEach-Object { "$($_.Name) | $($_.Id)" } | Set-Content "$tempDir\winget_packages.txt" -Encoding UTF8
    
  1. 去重处理(可选)
    按包的唯一ID去重(比文本去重更可靠):
$uniquePackageList = $packageList | Sort-Object Id -Unique
# 导出去重后的结果
$uniquePackageList | Export-Csv -Path "$tempDir\winget_packages_unique.csv" -Encoding UTF8 -NoTypeInformation

原方案无效的原因

  • 表格输出为控制台显示优化,会自动截断超出窗口宽度的文本,即使最大化窗口也无法覆盖所有超长名称/ID
  • 文本输出的编码兼容性差,容易出现乱码;而JSON采用标准UTF-8编码,完全避免此类问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:40:22