- Winget 是 Windows 官方的程序包管理器,允许您从命令行安装、更新和卸载应用程序。
- 该工具集成了 Microsoft Store、社区存储库和私有来源,并支持多种安装程序格式。
- 它允许您在企业环境中使用 YAML 配置文件、PowerShell 脚本和组策略来自动化整个团队。
- 它包含高级功能,例如无需安装即可下载、清单验证、版本 PIN 码以及丰富的安全和注册选项。
如果你每天都使用 Windows 系统,并且花费大量时间安装、更新或卸载程序,那么学习如何从终端使用 Winget可以为你节省大量时间。这款微软官方的软件包管理器为 Windows 带来了一种与 GNU/Linux 发行版使用 apt 或 dnf 非常相似的工作方式,但无需安装第三方工具。
使用 Winget,您只需输入命令即可搜索、安装、更新、卸载和配置应用程序,还可以使用脚本或配置文件自动完成 PC 的全部设置。无论您是家庭用户、开发人员还是系统管理员,我们都将详细了解它的工作原理、可用命令以及如何充分利用它。
Winget是什么?Windows程序包管理器是如何工作的?
Winget 是Windows 程序包管理器的命令行工具。它是一个客户端,可以连接到各种来源(Microsoft Store、Winget 社区存储库和私有存储库)来查找安装程序、下载安装程序并执行受控且可重复的安装。
实际上,winget 由多个元素组成,这些元素共同协作来管理系统上的软件,因此用户可见的核心是 winget 命令,但在幕后,有服务和清单来描述每个软件包。
完整的 Windows 程序包管理器解决方案包含三个主要部分,区分这三个部分对于理解整个生态系统至关重要:
- Winget 客户端:是您在 PowerShell、终端或命令提示符中用来启动类似命令的控制台可执行文件。
winget installowinget upgrade. - 包装和仓储服务微软在 GitHub 上维护着一个清单社区存储库,并与 Microsoft Store 集成,以便在 Windows 计算机上托管和分发应用程序。
- Winget配置文件这些是描述电脑“期望状态”(应用程序、设置、脚本)的 YAML 文件,允许 使用一条命令配置整个设备.
其理念是,您可以定义所需的软件和配置,而软件包管理器将自动负责安装、更新和维护所有内容,从而最大限度地减少人为错误和机器之间的差异。
在 Windows 10、Windows 11 和 Windows Server 上安装 Winget
在大多数现代设备上,Winget 可以直接使用,因为它已集成到…… 应用安装程序 它通过 Windows 10 和 Windows 11 中的 Microsoft Store 分发,并通过 Windows Server 2025 的更新分发。只需打开终端并输入即可。 winget 检查是否可用。
如果在运行命令时看到选项列表和客户端版本,则表示您已正确安装 Windows 程序包管理器。否则,您可以前往 Microsoft Store,搜索“App Installer”,然后更新或安装该程序包。
安装 winget 预览版(面向开发者)
如果您想抢先体验 Winget 的新功能,微软提供了预览版。这些预览版主要面向开发人员和高级用户,他们不介意偶尔遇到一些 bug。
获取客户端预览通常有两种方式:
- 手动从 GitHub 上的 winget 仓库下载预览版软件包, 安装此客户端以暂时替代稳定客户端。您将不会收到商店后续预览的自动更新;当有新预览发布时,您必须重复此过程。
- 加入 Windows Insider程序 使用 Microsoft 帐户、工作帐户、学校帐户或 Entra ID(以前称为 AAD)在 Canary 或 Dev 频道上进行部署。在这些频道上,构建会自动包含 Winget 更新来自 Microsoft Store 包含最新的实验性功能。
在 Windows 沙盒(隔离空间)中安装 Winget
Windows Sandbox 是一个轻量级、一次性的桌面环境,您可以在其中运行应用程序,而无需依赖主系统。关闭沙盒后,您在沙盒中安装的所有内容都会丢失,因此它非常适合用于测试。
这个环境没有预装 Microsoft Store 或 Winget,所以你需要自己安装。 手动安装客户端微软建议使用 PowerShell 模块 Microsoft.WinGet.Client 以及 cmdlet Repair-WinGetPackageManager 在沙盒中“启动”winget。
在沙盒环境的 PowerShell 控制台中,您可以使用类似这样的脚本(已进行调整和格式化)将稳定版本部署到环境中的所有用户:
$progressPreference = 'silentlyContinue'
Install-PackageProvider -Name NuGet -Force | Out-Null
Install-Module -Name Microsoft.WinGet.Client -Force -Repository PSGallery | Out-Null
Repair-WinGetPackageManager -AllUsers
如有需要,该模块也可以通过以下方式安装: 用户或机器范围 使用参数 -Scope AllUsers en Install-Module您可以添加 -IncludePrerelease a Repair-WinGetPackageManager 测试预览版本。
重要的许可和行政注意事项
使用 Winget 进行安装时,其行为会因您是以管理员权限还是普通用户身份运行命令而有所不同。如果您管理多台计算机或希望自动化某些流程,这一点至关重要。
如果您在未获得管理员权限的情况下启动 Winget,某些应用程序需要管理员权限才能安装。在这种情况下,Windows 将显示用户帐户控制 (UAC) 提示,要求您确认。如果您拒绝提升权限,则该特定软件包的安装或更新将失败。
如果您以管理员身份打开 PowerShell 或命令提示符并运行 `winget`,则需要提升权限的安装程序将不会显示用户帐户控制 (UAC) 提示,因为上下文已提升。这很方便,但也意味着您必须非常谨慎,并且只安装受信任的软件,尤其是在企业环境中。
在混合场景(必须在用户级别运行的程序与必须在机器级别运行的程序)中,通常会以用户和管理员身份组合执行 winget,或者使用组策略来强制执行某些行为并减少警告。
Winget 的基本用法:必备的初始命令
一旦您的 App Installer 更新到最新版本,使用 winget 就非常简单了: 打开 PowerShell、Windows 终端或 CMD 并写 winget您将看到已安装的版本、概述和可用命令列表。
典型的工作流程几乎总是从搜索开始,然后安装你感兴趣的应用程序。基本步骤大致如下:
- 搜索一个应用程序:
winget search <nombre_de_app> - 请核对所需软件包的名称、标识符和来源。
- 安装它:
winget install <nombre_o_id>
安装过程中,winget会下载适合您架构和源代码的正确安装程序,并使用适当的参数启动它(通常以静默模式或最小化交互模式运行),并在最后告知您一切是否顺利。
如果您想查看系统上已有的应用程序,可以启动它。 winget list 因此, 已安装软件包及其版本列表此命令对于检查哪些内容可以更新以及 Winget 可以识别哪些内容非常有用,即使这些内容最初并非使用此工具安装的。
完整的主要winget命令列表
客户端支持一系列特定命令,旨在涵盖应用程序的整个生命周期和配置。目前,最重要的通用命令包括:
| 命令 | 描述 |
|---|---|
install |
安装 该应用程序来自已配置的源。 |
show |
样本 详细信息 软件包的(编辑器、版本、来源等)。 |
source |
它允许 添加、删除或更新 软件包仓库。 |
search |
做一个 búsqueda 已配置源中的应用程序。 |
list |
显示 已安装软件包的列表 由winget识别。 |
upgrade |
更新 特定应用程序或所有有新版本的应用程序。 |
uninstall |
卸载数量 一个具体的应用。 |
hash |
计算 SHA256 哈希 来自安装人员。 |
validate |
检查 宣言的有效性 在将其发送到社区代码库之前。 |
settings |
打开并允许编辑文件 翼配置. |
features |
它显示了以下状态: 实验功能. |
export |
出口 将已安装软件包列表保存到文件中。 |
import |
批量安装 导出文件中列出的所有软件包。 |
pin |
它允许 锚版本 对软件包进行调整,使其不再更新到某个特定版本。 |
configure |
运行文件 声明式配置 使系统保持在所需状态。 |
download |
下载安装程序 无需运行应用程序即可运行它们。 |
repair |
尝试 reparar 设施存在问题。 |
dscv3 |
与……相关的命令 PowerShell DSC v3 以及所需的配置资源。 |
全局选项和最常用参数
几乎所有 Winget 命令都接受全局选项来修改其行为,例如显示更多信息、控制代理或抑制警告。其中一些最相关的选项包括:
| 选项 | 功能 |
|---|---|
-v, --version |
显示 当前版本的winget客户端. |
--info |
返回详细的安装信息(许可证、隐私、组策略等)。 |
-?, --help |
提出 具体帮助 命令。 |
--wait |
制作小翼 等待钥匙 退出前,在临时窗口中运行程序时很有用。 |
--logs, --open-logs |
打开默认文件夹,该文件夹位于 winget日志. |
--verbose, --verbose-logs |
激活一个 详细记录 用于调试。 |
--nowarn, --ignore-warnings |
隐藏 警告信息. |
--disable-interactivity |
尝试停用 所有交互式请求 用于自动化操作。 |
--proxy |
建立 HTTP/HTTPS代理 将在执行过程中使用。 |
--no-proxy |
强制一个翼 请勿使用代理。 即使系统已经配置好了。 |
主要实用功能:搜索、安装、列表和更新
在日常使用中,Winget 主要用于一些非常直接的命令,使用户无需手动操作安装程序即可管理应用程序,就像在 Linux 中使用软件包管理器一样。
为了找到可用的软件,您可以利用以下资源。 winget search <texto>返回一个列表 名称、标识符、版本和来源 与搜索条件匹配的结果。此列表还可以帮助您确定要安装的软件包的确切 ID。
要查看您已安装的程序,只需运行 winget list该命令会显示 Winget 识别的所有应用程序,无论它们是否使用该工具安装,并允许您执行以下操作: 检测需要更新的旧版本.
标准安装是通过以下方式完成的: winget install NOMBRE_APP 或者更好的是,使用 包裹 ID,例如: winget install Microsoft.VisualStudioCode如果安装需要交互(接受最终用户许可协议、选择选项等),通常会尽可能以简化或静默模式进行。
有时,安装程序会暂停安装过程,要求您接受许可协议或确认屏幕上的某些内容。为了确保从头到尾顺利完成安装而无需提示,您可以使用以下参数: --silent y --accept-package-agreements --accept-source-agreements, 以便 您将强制接受协议并移除不必要的窗口。.
为了保持系统最新,winget 提供了多种软件更新方式。该命令 winget upgrade 无需赘言,它就会显示 所有应用程序的新版本均已发布而 winget upgrade NOMBRE_APP 只会更新特定软件包。
如果您更喜欢一次性完成所有操作, winget upgrade --all 它会尝试更新所有已有更新版本的软件包。这就涉及到权限问题了:如果您以用户身份运行它, 对于每项需要吊装的安装工程,都将发出UAC通知。如果以管理员身份执行此操作,则无需显示对话框即可进行管理。
最后,卸载也非常容易。 winget uninstall NOMBRE_APP而且你甚至可以 在同一命令行中包含多个应用程序 只要 winget 在系统中识别出它们,它们就会一个接一个地被移除。
不太为人所知但非常有用的命令
除了基本命令外,winget 还包含许多快速指南中未提及的几个功能,这些功能在处理多个软件包或需要避免识别错误时非常实用。
命令 winget show NOMBRE_APP 它用来看 安装软件包之前需要了解其所有详细信息。:发布者、具体版本、ID、来源、安装程序类型,有时甚至包括官方链接。您还可以按标识符进行筛选。 winget show --id ID_PAQUETE 选择稳妥的办法。
如果您担心安装程序会因为等待您接受许可协议而停滞不前,您可以添加以下参数。 --accept-package-agreements y --accept-source-agreements a winget install 为 法律条款将自动接受。 没有对话框。
将这些选项与 --silent, 例如 winget install NOMBRE_APP --accept-package-agreements --accept-source-agreements --silent, 你得到 完全无人值守的设施在部署脚本中非常有用,或者当您想让电脑在您做其他事情时保持运行。
winget 下载命令:下载安装程序而无需安装
在某些情况下,您可能想要下载应用程序安装程序,但暂时不运行它们:例如,将它们移动到离线计算机、准备本地存储库或在安装之前手动查看内容。
这就是该命令的作用。 winget download其基本用途是 winget download [[-q] <query>] [<options>]它支持按 ID、名称或别名进行通用查询和筛选,并下载与您的选择对应的安装程序(或多个安装程序)。
如果软件包来自 Microsoft Store 且为打包应用程序(MSIX、APPX、捆绑包等),`winget` 命令还可以下载关联的许可证文件。在这种情况下,该命令需要使用 Entra ID 进行身份验证,并且帐户必须具有全局管理员、用户管理员或许可证管理员等角色,才能离线生成和检索该许可证文件。
如果您想避免处理离线许可证,可以使用该参数。 --skip-license o --skip-microsoft-store-package-license所以 winget 只需下载安装程序,无需尝试获取许可证文件。.
该命令还允许按平台或架构进行筛选。 --platform 您可以选择以下值: Windows.Desktop, Windows.Universal o Windows.Holographic 为 限制下载范围,仅限特定类型的设备。.
同样地, --architecture 你可以指出 x86、x64、ARM 或 ARM64 仅选择适用于目标 CPU 的安装程序。如果您要将这些文件移动到架构不同的其他计算机,这将特别有用。
最常见的选项之一是 winget download 包括:
-d, --download-directory:下载的安装程序将保存到的文件夹。-m, --manifest: 指向描述应下载内容的 YAML 清单的路径。--id,--name,--moniker:筛选器,将结果限制在特定软件包内。-v, --version:如果您不想下载最新版本,请提供要下载的确切版本。-s, --source:将操作限制在特定来源。--scope,--installer-type,--locale,--skip-dependencies高级选项,可详细控制下载内容。
一些实际例子如下:
winget download --id Microsoft.PowerToys --version 0.15.2
winget download --id Microsoft.WingetCreate --installer-type msix
winget download --id Microsoft.PowerToys --scope machine --architecture x64 --download-directory C:\Instaladores
与 Winget 兼容的安装程序格式
为了与数千个应用程序保持一致,winget 可以识别许多常见的 Windows 安装程序类型,包括现代打包安装程序和经典安装程序。
目前支持的格式包括:
- 可执行文件 EXE 采用静默安装参数(无声 o SilentWithProgress).
- 记录 邮编 以便携模式部署。
- 安装人员 Inno设置.
- 安装人员 Nullsoft (NSIS).
- 套餐 微星 y WIX.
- 打包的应用 APPX y MSIX.
- 安装程序类型 烧伤.
- 应用 手提 (无需传统安装,直接运行可执行文件)。
得益于此,winget 可以管理现代应用商店应用程序和传统桌面程序,前提是它们的清单在相应的存储库中正确定义。
使用 WinGet 和 PowerShell 进行脚本编写和自动化
如果您喜欢自动化任务或管理多个团队,可以将 Winget 与 PowerShell 和声明式脚本为此,微软正在发布该模块。 Microsoft.WinGet.Client 在 PowerShell Gallery 中,它公开了用于与服务交互的特定 cmdlet。
使用此模块,您可以创建使用纯 PowerShell安装、更新或修复软件包的脚本,将 winget 集成到 CI/CD 管道中,或将其集成到用于配置新机器的脚本中。
此外,还有与该命令关联的 YAML 配置文件。 winget configure 允许您在单个文档中描述:
- 前提条件(断言)最低系统要求为 Windows 版本。
- 资源其中包括要安装的软件包、要运行的脚本、系统设置等。
一个简化的配置示例可能包含一个断言部分(用于设置最低 Windows 10 版本要求)和一个资源部分(包含 Visual Studio Code、Google Chrome 和一个用于准备其他模块的 PowerShell 脚本)。有了 YAML 文件后,只需运行:
winget configure --file ruta\a\winget.yaml
这样一来,只需一条命令,即可让计算机每次都保留相同的应用程序和设置,非常适合企业环境、教室、实验室或格式化后的个人电脑。
添加存储库并使用自定义源
默认情况下,Winget 使用Microsoft Store和 GitHub 上维护的社区存储库作为其主要来源。但是,您也可以添加其他存储库来扩展目录或使用您组织的内部软件包。
许多企业环境会创建自己的 REST 源,其中包含企业应用程序的清单,以便用户可以使用 winget 安装它们,就像安装公共软件包一样,但可以控制版本、许可证和分发。
要添加新字体,请以管理员身份打开 PowerShell,并运行如下命令:
winget source add --name MiRepositorio --arg https://url.de.mi.repo/api
该命令还支持其他选项,例如 --type (来源类型,通常为 REST) --trust-level (例如: 信任 o 没有)Y --accept-source-agreements, 这适用于 自动接受该存储库的协议 无需手动确认。
要验证来源是否已正确添加,您可以使用 winget source list 并查看已注册的来源列表。您也可以在不再需要时更新或删除来源。
Winget 适用于开发者、独立软件开发商和企业
虽然任何用户都可以从 winget 中受益,但它在需要标准化安装和工作环境的开发人员、软件制造商和 IT 管理员手中真正发挥了作用。
开发者可以在一个文件中描述他们的基本工具(编辑器、SDK、编译器、各种实用程序),然后让 Windows 程序包管理器负责正确安装所有依赖项,不会遗漏任何依赖项,也不会导致不同机器之间的版本不一致。
软件供应商(ISV)可以访问 GitHub 上的 Winget 社区代码库,并在其中上传应用程序清单,以便该工具将其包含在默认源中。软件包会自动进行验证,也可以进行人工审核以确保其质量。
在企业环境中,Winget 简化了安全和 IT 团队的任务,因为它可以与Microsoft Intune 和组策略结合使用,以强制执行严格的策略,控制安装的内容、来源和条件,从而降低风险并保持一致的更新和强化水平。
安全性、证书锚定和组策略
Winget、Microsoft Store 和其他 REST 源之间的连接受到证书检查和安全机制的保护,以防止中间人 (MITM) 攻击和凭据或数据被盗。
以微软商店为例,有一项名为……的政策 BypassCertificatePinningForMicrosoftStore 该 检查 Winget 是否验证了存储证书哈希值 对照已知证书列表进行验证。当组织使用带有 SSL 检测功能的防火墙时,这一点至关重要,因为防火墙可能会干扰验证过程。
本保单包含以下选项:
- 无需配置(默认)winget 遵循标准软件包管理器设置并检查应用商店证书。
- 启用省略了 Microsoft Store 证书验证,这在某些 SSL 检测场景中可能是必要的,但是 中间人攻击的风险增加。.
- 禁用Winget 必须先验证证书是否真的属于证书存储区,然后才能建立连接。
证书绑定是一层额外的安全措施,可确保 Winget 客户端和 Microsoft Store 之间的通信不易被拦截或篡改。从安全角度来看,无故禁用证书绑定并非明智之举。
除了上述策略之外,每个版本的 Windows 11 都包含用于 Winget 的特定 ADMX/ADML 模板,这些模板扩展了组策略管理控制台 (GPMC) 中的配置选项。这些模板按类别组织,例如允许的源代码控制、本地开发(实验性功能、本地清单)以及代理执行和使用策略。
要使用这些模板,您可以从 GitHub 下载文件。 DesktopAppInstallerPolicies.zip 根据您所需的 Winget 版本,解压并复制文件。 .admx y .adml 到标准路线 C:\Windows\PolicyDefinitions 及其语言子文件夹。之后,新选项将出现在 GPMC 中,您将能够…… 将它们应用于组织单元 (OU)、站点或整个域.
调试、日志记录和发送新包
当出现问题时(下载失败、安装未完成、版本冲突),winget 会生成详细的日志,这对于查找问题的根源非常有用。
您可以使用该选项打开日志文件夹。 --open-logs 或激活 --verbose-logs 这样,该工具就能保存更多关于每次操作的信息。官方存储库 winget-cli 它还保持着一个 常见问题列表及推荐解决方案因此,在提出新问题之前,最好先查看一下。
如果目录中缺少某个程序,您可以随时创建并向社区仓库提交清单文件。这样,不仅您自己可以使用该程序,其他用户和组织也可以通过 Winget 轻松安装它。
该工具本身是开源的,位于代码仓库中。 microsoft/winget-cli它使用 C++ 编写,并设计为使用 Visual Studio 2022 编译。如果您想贡献代码,您需要…… 接受并签署贡献者许可协议(CLA) 从微软仓库推送更改,并将更改从你的分支推送过来。
最终,了解并掌握 Winget 可以让您将 Windows PC 视为“服务器”或严肃的开发系统:一切皆可脚本化,一切皆可复现,并且可以精细控制安装的内容和方式,从而避免不必要的点击和意外情况,例如版本不匹配或程序不知其来源。