WinGet 随 Windows 11 一起预装,但绝大多数人从没打开过它。这也可以理解——微软把它藏在了命令行后面,还几乎不做任何宣传。可话说回来,一行命令装好一个应用,怎么都比找对下载页面、再点过一堆想给你装浏览器扩展的安装向导要强。

微软文档里记录了十八个顶级命令,其中好几个是给往仓库提交包的人用的,而不是给从仓库装包的人用的。下面这十七条覆盖了一个普通 Windows 11 用户真正需要的部分。

在 Windows 终端、PowerShell 或命令提示符里运行它们。少数几条需要管理员权限,需要的地方我会标注。

先确认你装了没有

```Bash/Shell winget --version

能返回版本号就说明没问题。如果 Windows 提示"无法识别该命令",说明 WinGet 缺失或者不在 PATH 里——这种情况在从 Windows 10 升级上来的机器上比全新安装的 Windows 11 更常见。

![用命令检查 WinGet 版本](/media/editor/Check-the-Winget-version-using-command_20261012211442256527.webp)

## 你应该掌握的 WinGet 命令……

### 1. winget search

```Bash/Shell
winget search firefox

按名称、发布者或别名查找软件包。输出里会给出名称、ID、版本和来源。真正关键的是那个 ID,而且它很少能靠猜中:Firefox 是 Mozilla.Firefox,VLC 是 VideoLAN.VLC,7-Zip 是 7zip.7zip。先搜索,是避免装到"差不多但不对"的那个包的办法。

winget search 命令

2. winget show

```Bash/Shell winget show --id Mozilla.Firefox

搜索结果里经常有两三个名字几乎一样的包,其中一个才是官方版本,剩下的可能是分叉版、便携版,或者别人重新打包的。这条命令会显示发布者、版本、许可证、主页、安装程序类型和下载地址,通常足够把它们区分开。

![winget show 命令](/media/editor/winget-show-command-1024x573_20261012211512330019.webp)

### 3. winget install

```Bash/Shell
winget install -e --id Mozilla.Firefox

-e 表示对 ID 做精确匹配。不加它,WinGet 会做模糊匹配,可能装到跟你想要的东西只差一点点的那个包。

Winget 安装命令

养成把 -e --id 连在一起用的习惯。模糊匹配在你随便探索时没问题,但写脚本时就是个坑。

4. 安装指定版本

```Bash/Shell winget install -e --id Mozilla.Firefox --version 128.0

把安装固定在某个版本,而不是直接取最新版。当新版本把你的东西搞坏了,或者你需要跟另一台机器保持版本一致时,这就很有用。

先运行 `winget show --id <包名> --versions` 看看仓库里到底有哪些版本可选。

### 5. 静默安装

```Bash/Shell
winget install -e --id 7zip.7zip --silent --accept-package-agreements --accept-source-agreements

--silent 会屏蔽安装程序界面,两个 agreement 参数则让 WinGet 不再停下来问你是否接受条款。

这是脚本里或批量安装时该用的形式。注意 --silent 只在包清单支持静默安装时有效,所以有些应用仍然会弹出自己的窗口。

6. winget list

```Bash/Shell winget list

**列出这台机器上安装的所有东西**,不只是你用 WinGet 装的。手动下载安装的应用也会出现在**里面**——很多人第一次运行时会因此被吓一跳。

![用 Winget 列出 Windows 11 上安装的所有应用](/media/editor/List-all-installed-apps-on-windows-11-using-Winget_20261012211553204527.webp)

你还可以在这条命令后面加搜索词来进一步缩小范围……

```Bash/Shell
winget list adobe

7. 查看有哪些更新等着装

```Bash/Shell winget upgrade

列出有更新版本的已安装包,当前版本和可用版本并排显示。

有些条目会显示成 Unknown 版本。这说明 **WinGet** 读不到已安装的版本号,通常是因为这个应用是在 WinGet 之外安装的。

![用 Winget 列出 Windows 上可升级的包](/media/editor/list-windows-packages-that-can-be-upgraded-using-Winget_20261012211624165366.webp)

### 8. 一次性更新全部

```Bash/Shell
winget upgrade --all --include-unknown --silent --accept-package-agreements --accept-source-agreements

这条会把所有有更新版本的包全部升级,中途不做任何提示。如果这篇文章你只记一条命令,就记这条。

--include-unknown 是大多数教程漏掉的那个参数。没有它,WinGet 会完全跳过那些版本未知的条目——在一台典型机器上,这可占了已安装应用的一半。

用 Winget 静默升级 Windows 上的包

9. winget uninstall

```Bash/Shell winget uninstall -e --id Mozilla.Firefox

**移除**软件包,包括在 WinGet 之外安装的那些——前提是它们出现在 `winget list` 里。它支持跟 install 一样的 `--silent` 参数,所以能放进清理脚本里用。

### 10. winget export

```Bash/Shell
winget export -o C:\Users\YourName\apps.json

把你已安装的包导出成一个 JSON 文件。在重装系统之前、把机器交给别人之前,或者干脆每月做一次记录,都该跑一下这条命令。

不在 WinGet 仓库里的包会被跳过,过程中 WinGet 会告诉你跳过了哪些。

11. winget import

```Bash/Shell winget import -i C:\Users\YourName\apps.json

从导出的文件里重新装回所有东西。配合 export 使用,这就是重装系统后重建应用清单的办法,不用一个个去下载页面点。

想让它一路跑完不停下来问你,加上 `--accept-package-agreements`。

### 12. winget pin

```Bash/Shell
winget pin add -e --id Mozilla.Firefox
winget pin list
winget pin remove -e --id Mozilla.Firefox

固定(pin)能阻止某个包被 winget upgrade --all 更新。凡是新版本会打断你工作流的,都该用上它——比如驱动工具,或者许可证绑定了特定版本的工具。

被固定的包会从升级结果里隐藏,除非你加上 --include-pinned。

13. winget download

```Bash/Shell winget download -e --id Mozilla.Firefox

只下载安装程序,不运行它。文件默认落在你的"下载"文件夹,用 `-d` 可以指定到别处。

这台机器没网,或者你想给好几台电脑用同一个安装包而不想重复下载时,这条命令很顺手。

### 14. winget repair

```Bash/Shell
winget repair -e --id Microsoft.VisualStudioCode

触发应用自带的修复流程,跟你在"程序和功能"里点到的那个一样。只在包清单定义了修复行为时才有效,所以很多应用上它会直接失败。

15. winget source

```Bash/Shell winget source list winget source reset --force

WinGet 默认从两个源拉取:社区仓库(名为 winget)和 msstore(微软商店应用)。

`source list` 显示当前配置了哪些源。`source reset --force` 会把一切恢复成默认值,能解决相当一部分莫名其妙的报错。重置操作需要管理员权限。

### 16. winget settings

```Bash/Shell
winget settings

用你默认的 JSON 编辑器打开 WinGet 的设置文件。默认安装范围、实验性功能开关、进度条样式、更新行为,都在这里改。

```Bash/Shell winget settings export

把当前设置以 JSON 形式打印在终端里,只想确认某个值时这样更快。

### 17. winget configure

```Bash/Shell
winget configure -f dev-setup.winget

应用一个描述目标机器状态的配置文件,内容涵盖装哪些包、应用哪些设置、以什么顺序执行。

它需要先装 DSC 模块:

Bash/Shell Install-Module Microsoft.WinGet.DSC -Force

这是本文最重的一条命令,大多数人一辈子也用不到。之所以列出来,是因为重装系统后重建整台机器这件事,清单里其他命令都干不好。

可以放心忽略的命令

微软文档里的命令中有三条,是给发布包的人用的,不是给安装包的人用的。

winget hash 为安装文件生成 SHA256。winget validate 在提交到仓库前校验清单。winget dscv3 为配置工具暴露 DSC v3 资源。

这三条跟其他命令写在同一个文档里,所以它们经常出现在面向普通用户的命令清单中。除非你要提交包,否则跳过它们。

如果 WinGet 无法识别

几乎所有情况都出在下面几条里。

  • "应用安装程序"包缺失,最常见于从 Windows 10 升级上来的机器。从微软商店装上"应用安装程序",它就回来了。
  • PATH 条目缺失,虽然 WinGet 本身在。注销再登录,让环境重新读取。
  • 你以 SYSTEM 身份运行,或者处在 WinGet 不支持的环境里。它是设计给已登录用户运行的。

常见问答

WinGet 用起来安全吗?

默认的 winget 源是微软的社区仓库,包清单位入库前需要审核,安装程序也要跟公布的哈希值核对。msstore 源就是微软商店本身。两者都比你去搜下载页面要安全——搜出来的头几条往往都是广告。

WinGet 在 Windows 10 上能用吗?

能,1809 及更高版本通过"应用安装程序"包支持。Windows 11 则开箱即用。

为什么 winget upgrade 会漏掉一些应用?

两个原因。在 WinGet 之外安装的应用常常上报为 Unknown 版本,除非你加 --include-unknown,否则升级会跳过它们。而完全不在仓库里的应用则无法追踪。

能拿 WinGet 替代微软商店吗?

对大多数桌面应用来说可以。商店应用依然能通过 msstore 源获取,所以 winget install --source msstore <名称> 在同一个终端里就能拿到它们。

需要管理员权限吗?

不是所有操作都需要。按用户安装不需要提权。全机安装,以及 source reset,会弹提示要求提权。