使用winget实现软件管理
|Word Count:972|Reading Time:3mins|Post Views:
简介
winget是微软在Windows 1809之后提供的综合性程序包管理器解决方案,最新的Windows 10/11 22H2 版本已经内置。简单来说,就是Windows 具备了类似apt、yum、pcman之类在终端直接部署和管理软件的包管理器。
基本使用格式为: winget [命令] ID
官方使用指南:
- 文档地址
- 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的当前用户配置文件
设立两个自定义命令:
- 开始使用本地代理:spp
- 停止使用本地代理: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', $_) } }
|
更改镜像源
更改镜像源需要两个条件:
- 使用管理员权限操作终端或者powershell;
- 需要临时关闭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安装使用
管理已安装软件