1. WinGet 初探:微软官方的包管理神器
第一次接触WinGet是在去年帮同事重装系统时,发现他手动一个个下载开发工具花了整整半天。当时我就在想:Linux有apt/yum,macOS有brew,Windows难道没有类似的工具吗?结果还真让我找到了这个微软官方出品的包管理工具。WinGet本质上是一个命令行工具,能够让你用简单的指令完成软件的搜索、安装、升级和卸载,彻底告别"百度搜索→进入官网→下载安装包→下一步下一步"的传统流程。
经过一年多的深度使用,我发现WinGet特别适合以下几类人群:
- 经常需要配置新环境的开发者(比如我这种三天两头重装系统的人)
- 需要批量部署软件的企业IT管理员
- 追求效率的极客用户
- 需要远程协助他人安装软件的技术支持人员
2. WinGet 的安装与配置
2.1 系统要求与安装方式
WinGet需要Windows 10 1709及以上版本,但建议使用1809或更高版本以获得完整功能。安装方式主要有三种:
-
通过Microsoft Store安装(最简单):
- 打开Microsoft Store搜索"App Installer"
- 点击获取并安装(会自动包含WinGet)
-
手动安装(适合企业环境):
powershell复制# 下载最新release的.msixbundle文件 $url = "https://github.com/microsoft/winget-cli/releases/latest/download/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" Invoke-WebRequest -Uri $url -OutFile .\winget.msixbundle # 安装 Add-AppxPackage -Path .\winget.msixbundle -
通过Windows Package Manager Insider Program(获取预览版功能):
需要加入Microsoft Insider计划,在设置→更新与安全→Windows Insider Program中注册。
注意:如果遇到"无法安装因为系统策略禁止此安装"错误,可能需要先执行:
powershell复制Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
2.2 初始配置与优化
安装完成后建议进行以下配置:
-
启用实验性功能(2023年新增):
powershell复制winget settings --enable Experimental -
修改安装策略(避免频繁弹窗):
powershell复制winget config --set installBehavior.preferences.autoUpdate true -
添加第三方源(扩展软件库):
powershell复制winget source add --name "msstore" --arg "https://storeedgefd.dsx.mp.microsoft.com/v9.0" --type "Microsoft.Rest" -
配置代理(国内用户可能需要):
powershell复制netsh winhttp set proxy 127.0.0.1:1080
3. WinGet 核心功能详解
3.1 软件搜索与发现
WinGet的搜索功能比想象中强大得多,支持模糊匹配和过滤器:
powershell复制# 基础搜索
winget search chrome
# 使用过滤器(2023年新增)
winget search --id=Google.Chrome
winget search --name="Visual Studio" --tag=IDE
winget search --moniker=python3
# 查看软件详情
winget show Mozilla.Firefox
搜索结果的各列含义:
- Name:软件名称
- Id:唯一标识符(重要)
- Version:当前版本
- Source:软件源
- Match:匹配度
3.2 软件安装的进阶技巧
基础安装命令很简单:
powershell复制winget install Google.Chrome
但实际使用中有更多实用技巧:
-
指定版本安装:
powershell复制winget install Python.Python.3.8 --version 3.8.10 -
静默安装参数:
powershell复制winget install Microsoft.VisualStudioCode --silent --accept-package-agreements -
从特定源安装:
powershell复制winget install --source msstore Apple.iTunes -
安装本地包:
powershell复制winget install --file D:\Downloads\package.msix -
导出导入软件列表(批量部署):
powershell复制# 导出 winget export -o packages.json # 导入 winget import -i packages.json
3.3 软件更新与管理
WinGet最实用的功能之一就是批量更新:
powershell复制# 检查可用更新
winget upgrade
# 更新单个软件
winget upgrade Microsoft.VisualStudioCode
# 更新所有软件(谨慎使用)
winget upgrade --all
2023年新增的实用功能:
powershell复制# 仅查看过时的软件
winget upgrade --outdated
# 忽略特定软件更新
winget pin add Google.Chrome
3.4 卸载与清理
卸载同样简单但功能强大:
powershell复制# 基础卸载
winget uninstall Mozilla.Firefox
# 强制卸载(注册表残留)
winget uninstall Adobe.Reader --purge
# 交互式卸载(显示卸载向导)
winget uninstall Oracle.JavaRuntime --interactive
4. 企业级应用场景
4.1 批量部署标准化环境
在企业环境中,可以创建标准化的软件包配置文件:
json复制// dev_env.json
{
"Sources": [
{
"Name": "winget",
"Args": "https://winget.azureedge.net/cache"
}
],
"Packages": [
{
"PackageIdentifier": "Microsoft.VisualStudioCode",
"Version": "1.78.2"
},
{
"PackageIdentifier": "Git.Git",
"Version": "2.40.0"
}
]
}
然后通过组策略或Intune批量部署:
powershell复制winget import -i dev_env.json --accept-package-agreements
4.2 创建自定义软件源
企业可以搭建内部软件源:
-
创建manifest文件:
yaml复制# custom-app.yaml PackageIdentifier: Contoso.InternalApp PackageVersion: 1.0.0 InstallerType: msi InstallerUrl: https://internal-server/app.msi -
添加到本地源:
powershell复制winget source add --name "contoso" --arg "\\server\winget" --type "Microsoft.PreIndexed.Package"
4.3 与Azure DevOps集成
在CI/CD流水线中加入WinGet命令:
yaml复制steps:
- script: |
winget install Node.js --version 16.14.0
winget install Azure.CLI
displayName: '安装依赖工具'
5. 常见问题与解决方案
5.1 安装失败排查指南
错误1:"No applicable installer found"
- 原因:架构不匹配(如尝试在x86安装x64)
- 解决:
powershell复制winget install --architecture x64 Google.Chrome
错误2:"Installer hash does not match"
- 原因:下载包被篡改或源有问题
- 解决:
powershell复制winget install --force Microsoft.PowerShell
错误3:"Administrator rights required"
- 原因:需要提权
- 解决:
powershell复制Start-Process winget -ArgumentList "install Docker.DockerDesktop" -Verb RunAs
5.2 性能优化技巧
-
加速搜索:
powershell复制winget search --disable-spell-checker -
减少网络请求:
powershell复制winget source update --all -
使用本地缓存:
powershell复制winget install --download-only Google.Chrome winget install --local --file C:\Users\user\AppData\Local\Temp\GoogleChrome.msi
5.3 与其他工具的对比
| 特性 | WinGet | Chocolatey | Scoop |
|---|---|---|---|
| 微软官方支持 | ✓ | ✗ | ✗ |
| 无需管理员权限 | ✗ | ✗ | ✓ |
| 企业级功能 | ✓ | ✓ | ✗ |
| 软件数量 | 3000+ | 7000+ | 1000+ |
| 自定义源 | ✓ | ✓ | ✓ |
| 静默安装 | ✓ | ✓ | ✓ |
6. 高级技巧与自动化
6.1 编写批处理脚本
创建自动化安装脚本setup.cmd:
batch复制@echo off
winget install Microsoft.VisualStudioCode --silent
winget install Git.Git --silent
winget install Python.Python.3.10 --silent
winget install Docker.DockerDesktop --silent
6.2 与PowerShell集成
创建模块化安装函数:
powershell复制function Install-DevTools {
[CmdletBinding()]
param()
$apps = @(
"Microsoft.VisualStudioCode",
"Git.Git",
"Python.Python.3.10",
"Docker.DockerDesktop"
)
foreach ($app in $apps) {
winget install $app --silent --accept-package-agreements
}
}
6.3 使用REST API
WinGet 1.5+开始支持REST API:
powershell复制$response = Invoke-RestMethod -Uri "https://winget.azureedge.net/cache/source.msix"
$apps = $response.Packages | Where-Object { $_.Name -like "*Python*" }
7. 安全最佳实践
-
验证包哈希值:
powershell复制winget install --hash SHA256 abc123... Mozilla.Firefox -
审核第三方源:
powershell复制
winget source list winget source remove UnknownSource -
使用沙盒环境测试:
powershell复制
sandbox /w winget install Some.UnknownApp -
定期更新源:
powershell复制winget source update --all
经过一年多的深度使用,WinGet已经成为我日常工作中不可或缺的工具。最让我惊喜的是微软近半年来的更新频率,几乎每个月都有实用新功能加入。对于开发者而言,最大的价值在于能够用代码化的方式管理开发环境,实现"基础设施即代码"的理念。建议初学者可以从简单的软件安装开始尝试,逐步过渡到批量部署和自动化管理