一台全新的Windows电脑,开机之后是空的。要把它变成"自己的电脑",得花上好几个小时。装浏览器、装工具、装启动器、装开发环境——这些决定几年前就做完了,每次重装系统还得再做一遍。
一位长期测试新硬件的科技记者受够了这套流程。他决定换个思路:用微软官方的命令行包管理器winget,写一个能描述整套配置的文件,让机器自己把应用装回来。
winget在Linux世界里有个对应的东西叫apt,用法类似,可以搜索、安装、卸载、升级软件包。他用了多年的winget,这次盯上的是其中的export命令——把已安装的包列表导出来。
命令跑完,导出的JSON文件里躺着150多个来自winget源的包,外加几个来自微软商店的。但这不是他电脑上的全部。那些两个源里都没有的软件,比如手动安装的Brave、Discord、Postman和Android Studio,一个都没被捕获。
导出只是前半程。export吐出来的是JSON,而真正用来重建系统的configure命令要的是YAML,得先转换。他还得手动往文件里补上漏掉的包,删掉因为系统级和用户级各装了一遍而重复出现的条目。
configure命令能读YAML文件,一次性应用全部内容,应用和Windows设置都包括在内。设置部分export抓不到,于是他手动加了三条:开发者模式、文件扩展名与隐藏文件的显示、深色模式。VS Code的扩展本来也能导出,但他最近更多在Antigravity和Claude Code之间跳,就跳过了这一步。
最后,那个装着100多个应用和设置的文件被拆成了两份。第一份是核心应用,包括开发工具、日常软件和homelab访问工具;第二份是硬件厂商工具、游戏启动器和飞行模拟相关的东西。
文件写完了,还得验证它到底是纸上谈兵还是真能干活。他手头没有多余的Windows笔记本,只能用虚拟机测试,而且只放了一部分包。
下载最新的Windows 11 26H2镜像,启动VMware,几分钟就进了一个干净的系统。清掉所有待处理的Windows更新后,他确认这台新机器自带winget,版本是v1.11.510。
把YAML文件挪进虚拟机,先跑验证命令。第一次失败了,因为某个功能需要手动启用。用winget configure --enable打开之后重新验证,没有报出问题。
虚拟机里的测试文件只包含三条Windows设置和14个应用,不是全部150多个。他跑起configure命令并计时,应用都装上了,但三条设置只生效了两条——PowerShell没有以管理员身份运行,而计时命令把这次失败藏了起来。
第一次测试耗时14分26.8秒,其中还夹杂着他没及时点掉的UAC弹窗,那些弹窗一直在等。换一台全新虚拟机重跑,时间压到了12分钟以内。这证明配置文件对这14个应用是有效的,可以留着以后用。
但有些东西,这个文件从来就没承诺过能带回来。
装好和配好是两回事。应用确实都装上了,打开却全是陌生的样子:浏览器没有配置文件、没有历史记录、没有密码;工具类应用处于登出状态;VS Code一个扩展都没有——这一条得怪他自己没导出。
还有个细节。文件里虽然记录了每个应用的版本号,但这些版本并没有被锁定,新机器装上的版本比原来那台还新。比如Node是22.23.2对22.14,Python是3.13.15对3.13.3,Git是2.55.0对2.53.0。他没觉得有问题,但如果有人要停在某个特定构建上,就得自己手动处理。
需要授权的软件是另一份责任。MS Office和Adobe套件各自要单独认证,只能由他本人来。SSH密钥和git凭据这类敏感内容,他出于显而易见的原因特意留在了文件之外。任务栏和开始菜单布局、默认应用、显示缩放这几项他没有测试,也就无从评价。
这些取舍他能接受。忽略掉运行前启用配置那一步,剩下的就是一条命令,把应用装完,把Windows设置应用上。
这次小实验说明,一个winget配置文件能减少重复且无聊的安装工作。它给的是一个起点,不是旧电脑的精确副本。他也并不想要精确副本——把登录状态和许可证塞进YAML文件里并不安全,驱动又是跟设备绑定的,搬过去没有好处。
一份写下来、可重复执行的基线,比从零开始、靠记忆硬拼要好得多。
热门跟贴