简介

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

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

官方使用指南:

  1. 文档地址
  2. Windows开发环境
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的当前用户配置文件

code $PROFILE

设立两个自定义命令:

  1. 开始使用本地代理:spp
  2. 停止使用本地代理:upp
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文件,从而实现软件的批量安装。

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

使用脚本部署

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

@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命令的自动补全:

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
winget source remove winget
winget source add winget https://mirrors.ustc.edu.cn/winget-source

关闭SmartScreen的路径如下:

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

客户端

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

搜索安装可用包

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

管理已安装软件