使用winget实现软件管理
简介
winget是微软在Windows 1809之后提供的综合性程序包管理器解决方案,最新的Windows 10/11 22H2 版本已经内置。简单来说,就是Windows 具备了类似apt、yum、pcman之类在终端直接部署和管理软件的包管理器。
基本使用格式为: winget [命令] ID
官方使用指南:
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
设立两个自定义命令:
- 开始使用本地代理:spp
- 停止使用本地代理: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', $_)
}
}
更改镜像源
更改镜像源需要两个条件:
- 使用管理员权限操作终端或者powershell;
- 需要临时关闭Windows安全中心的SmartScreen
winget source remove winget
winget source add winget https://mirrors.ustc.edu.cn/winget-source
关闭SmartScreen的路径如下:
Windows安全中心——>应用和浏览器控制——>基于声誉的保护
客户端
基于winget的功能,第三方开发科WingetGUI程序,官网,可以使用图形化的方式来使用winget。
搜索安装可用包
很多国产软件都可以直接winget安装使用
管理已安装软件
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.