winget工具概述
WinGet概述
以下资料来源于微软社区:https://learn.microsoft.com/zh-cn/windows/package-manager/
什么是WinGet?
Windows软件包管理器 (WinGet) 是一个工具,帮助用户在Windows系统上发现和安装软件包。项目包括命令行界面 (CLI)、PowerShell模块和组件对象模型 (COM) API。客户端可以访问来自Microsoft Store和WinGet社区库的包,同时支持自建软件源访问。
什么系统支持使用WinGet?
Windows 10(1809)以后的版本,会自动安装WinGet工具。在此之前的windows系统需要手动安装,在微软商店。
windows 10 (1709)以后都支持使用,但是有一个前提条件,必须更新微软商店,原因是windows11采取了新的微软商店并强制要求所有商店更新至该版本否则不能使用。由于是新系统下的商店,很多依赖项在win10上是没有的,需要手动去安装,具体参考文章windows 10下安装winget。
最低支持版本:
winget 命令行工具仅在 Windows 10 1709(版本 16299)或更高版本上受支持。 在你首次以用户身份登录 Windows(这会触发 Microsoft Store 将 Windows 程序包管理器注册为异步进程的一部分)之前,winget 工具不可用。 如果最近已经以用户身份进行了首次登录,但发现 winget 尚不可用,则可以打开 PowerShell 并输入以下命令来请求此 winget 注册:Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe。
WinGet支持哪些安装程序?
● EXE(具有 Silent 和 SilentWithProgress 标志)
● ZIP
● INNO
● NULLSOFT
● MSI
● WIX
● APPX
● MSIX
● BURN
● PORTABLE
WinGet的下载
这里提供一个稳定版本1.8.1522
github地址:https://github.com/microsoft/winget-cli/releases
WinGet应用场景
通过以上方法,提升了网络整体安全性,避免了终端用户从不安全网站下载非法应用所带来的内网安全隐患。同时,通过使用批处理脚本实现批量安装应用程序,减少了重复工作,提高了工作效率。
WinGet软件源的搭建
准备工作,创建软件清单
这里用wingetcreate来实现软件清单创建
通过winget命令install wingetcreate(建议连接vpn,这里可能因为网络因素安装失败)
寻找需要的软件包,获取其下载链接。
通过wingetcreate new install url,来获取清单。
可以通过 wingetcreate.exe update –urls 来更新清单。
github地址:https://github.com/jantari/rewinged
搭建nginx服务器
由于winget要求软件源必须使用HTTPS,所以需要通过nginx的反向代理来实现访问。
安装过程不在这里赘述,贴一张nginx配置文件提供参考。
搭建Rewinged
Rewinged 是一个自托管的 winget 包源工具,可以运行在 Linux、Windows、Docker 或云环境中。它通过读取目录中的包清单,并通过 REST API 使这些包可以被 winget 客户端搜索和访问。这使得用户可以创建和管理自己的私有 winget 包源,而无需依赖于云服务,winget 要求 REST 源使用 HTTPS - 不允许明文 HTTP。
github地址:https://github.com/jantari/rewinged
封装好的程序包地址:https://github.com/jantari/rewinged/releases
- 将wingetcreate创建的清单移至服务器,Rewinged 对应目录下(wingetcreate及winget仅可在Windows运行,若操作系统为其他则需要手动填写清单,或将wingetcreate创建的清单移到对应文件夹中)
- 通过参数configFile可以将所有参数写成一个json来执行
- 命令行执行,运行Rewinged并在后台运行,在rg目录下会有一个日志文件生成
nohup ./rewinged -configFile /rg/rewinged.json
以下是一个基础的配置文件这里要讲一个参数的功能,-autoInternalize开启自动内化,启用后会将软件清单内的下载URL自动下载到本地指定文件夹,从而实现在不连接外网仅连接内网的情况下安装软件。第一次启用该功能会有一个下载软件的过程,在此过程中直接下载则会显示哈希认证不完整,必须等软件包被完整下载才可以正常使用。(从下载url到指定文件夹的这个过程可能会失败,每个软件都需要下载测试一下)1
2
3
4
5
6
7
8
9
10
11{
"autoInternalize": true,
"autoInternalizePath": "/rg/installers",
"autoInternalizeSkip": "",
"https": true,
"httpsCertificateFile": "/rg/ssl/qunhequnhe.com.crt",
"httpsPrivateKeyFile": "/rg/ssl/qunhequnhe.com.key",
"listen": "localhost:3000",
"logLevel": "info",
"manifestPath": "/rg/manifests"
}
这里说一下如果安装包hash校验不通过或者下载不完整怎么处理。
首先下载一个完整的安装包,将exe后缀去除使其变为文件,随后打开cmd页面输入命令“winget hash 文件路径”生成文件的哈希值。
随后找到rewinged目录下,修改对应软件目录下的installer文件
替换yaml文件内的哈希值为你下载的软件包哈希
随后到installers目录下,删除原先的软件包,将新下载的软件名称修改为哈希值(通过哈希值为索引),重启rewinged工具,完成替换。
扩展参数
这些命令行配置是用于配置和运行 rewinged
应用程序的参数。下面是每个参数的详细解释:
1 |
|
WinGet工具的使用
常用参数:
1 |
|
已管理员的身份启动命令行,执行“ winget source add -n qunhe -a https://winget.qunhequnhe.com/api -t “Microsoft.Rest”,随后“winget install 软件名 -s qunhe”即可。
这里我写一个bat脚本,能够自动执行添加软件源及安装小酷助手、企业微信、WPS及腾讯会议。有特殊需求直接修改这个脚本即可。
1 |
|
功能测试:
需要注意以下几点,
- win系统必须带有winget
- 必须能解析winget.qunhequnhe.com这个域名如果不可以可能是你的dns服务器设置的有问题,可以尝试使用10.1.102.201
拓展参数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17install 安装给定的程序包
show 显示包的相关信息
source 管理程序包的来源
search 查找并显示程序包的基本信息
list 显示已安装的程序包
upgrade 显示并执行可用升级
uninstall 卸载给定的程序包
hash 哈希安装程序的帮助程序
validate 验证清单文件
settings 打开设置或设置管理员设置
features 显示实验性功能的状态
export 导出已安装程序包的列表
import 安装文件中的所有程序包
pin 管理包钉
configure 将系统配置为所需状态
download 从给定的程序包下载安装程序
repair 修复所选包