简介

winget是微软在Windows 1809之后提供的综合性程序包管理器解决方案,最新的Windows 10/11 22H2 版本已经内置。简单来说,就是Windows 具备了类似apt、yum、pcman之类在终端直接部署和管理软件的包管理器。

基本使用格式为: winget [命令] ID

官方使用指南:

  1. 文档地址
  2. Windows开发环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
WinGet 命令行实用工具可从命令行安装应用程序和其他程序包。

使用情况: winget [<命令>] [<选项>]

下列命令有效:
install 安装给定的程序包
show 显示包的相关信息
source 管理程序包的来源
search 查找并显示程序包的基本信息
list 显示已安装的程序包
upgrade 显示并执行可用升级
uninstall 卸载给定的程序包
hash 哈希安装程序的帮助程序
validate 验证清单文件
settings 打开设置或设置管理员设置
features 显示实验性功能的状态
export 导出已安装程序包的列表
import 安装文件中的所有程序包
pin 管理包钉,即排除指定软件为更新项

如需特定命令的更多详细信息,请向其传递帮助参数。 [-?]

下列选项可用:
-v,--version 显示工具的版本
--info 显示工具的常规信息
-?,--help 显示选定命令的帮助信息
--wait 提示用户在退出前按任意键
--logs,--open-logs 打开默认日志位置
--verbose,--verbose-logs 启用 WinGet 的详细日志记录
--disable-interactivity 禁用交互式提示

可在此找到更多帮助: "https://aka.ms/winget-command-help"

示例

搜索指定软件包

列出当前系统软件

升级可用包

使用代理

在拉取Github上托管程序的时候,会遇到网络不可用的问题,例如上图。这就需要在开启代理之后,需要设置powershell的代理访问。
在安装vscode之后,使用如下命令,打开powershell的当前用户配置文件

1
code $PROFILE

设立两个自定义命令:

  1. 开始使用本地代理:spp
  2. 停止使用本地代理:upp
1
2
3
4
5
6
7
8
9
10
11
function set_proxy_variable {
Set-Item Env:http_proxy "http://127.0.0.1:33210"
Set-Item Env:https_proxy "http://127.0.0.1:33210"
}

function unset_proxy_variable {
Remove-Item Env:http_proxy
Remove-Item Env:https_proxy
}

New-Alias -Name spp -Value set_proxy_variable

设定不更新指定软件包

升级全部可升级软件包

进阶

批量部署软件

可以使用export和import这两个参数项来管理json文件,从而实现软件的批量安装。

1
2
winget export -o Thinkpad-install-soft.json
winget import -i Thinkpad-install-soft.json

使用脚本部署

winget也支持编写bat处理脚本来执行软件的部署。

1
2
3
4
5
6
7
8
@echo off  
Echo Install Powertoys and Terminal
REM Powertoys
winget install Microsoft.Powertoys
if %ERRORLEVEL% EQU 0 Echo Powertoys installed successfully.
REM Terminal
winget install Microsoft.WindowsTerminal
if %ERRORLEVEL% EQU 0 Echo Terminal installed successfully. %ERRORLEVEL%

开启自动补全

通过编辑powershell的启动文件可以实现winget命令的自动补全:

1
2
3
4
5
6
7
8
9
Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
[Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
$Local:word = $wordToComplete.Replace('"', '""')
$Local:ast = $commandAst.ToString().Replace('"', '""')
winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}

更改镜像源

更改镜像源需要两个条件:

  1. 使用管理员权限操作终端或者powershell;
  2. 需要临时关闭Windows安全中心的SmartScreen
1
2
winget source remove winget
winget source add winget https://mirrors.ustc.edu.cn/winget-source

关闭SmartScreen的路径如下:

Windows安全中心——>应用和浏览器控制——>基于声誉的保护

客户端

基于winget的功能,第三方开发科WingetGUI程序,官网,可以使用图形化的方式来使用winget。

搜索安装可用包

很多国产软件都可以直接winget安装使用

管理已安装软件