6.6 万 Star 的 WinUtil:一条命令跑起来的 Windows 装机瑞士军刀,我把源码和安全设计扒了一遍
每次重装完 Windows,都要重复一套机械劳动:去十几个官网下载安装包、关掉一堆用不上的预装应用、挨个改系统设置、修复各种网络和更新问题。有人把这套流程做成了一个开源工具,而且火到了 6.6 万 Star——它就是 Chris Titus Tech 的 WinUtil。
它的上手方式简单到只有一行命令:以管理员身份打开 PowerShell,输入 irm https://christitus.com/win | iex,一个图形界面就弹出来了。但越是这种"一行命令改系统"的工具,越值得把源码看清楚再用。我把整个仓库克隆下来逐块读了一遍,这篇回答三个问题:它到底能做多少事、那条神奇的一键命令背后发生了什么、以及动系统的安全性怎么兜底。
一、先看家底:近 3 万行 PowerShell,配置与逻辑彻底分离
WinUtil 不是几个脚本的拼盘,而是一个工程化程度相当高的项目。我统计了一下:194 个 .ps1 文件、约 2.98 万行代码,外加 63 个 Pester 测试文件。它的界面用 WPF + XAML 绘制,后台任务通过 Runspace 线程池执行,所以点按钮时界面不会卡死。
最值得称道的是它的数据组织方式——功能配置和执行逻辑完全分离。所有"能做什么"都写在 config/ 目录的 JSON 里,functions/ 里的代码只负责"怎么做":

我逐个清点了配置文件:
- applications.json:239 个应用,每个含 7 个字段并配独立 PNG 图标(
config/icons/下正好 239 个),基于 winget 安装,也支持切换 Chocolatey 引擎; - tweaks.json:69 组、共 480 项系统调整,每一项都是明确的注册表路径、键名、数值和类型;
- appx.json:34 组、201 个预装应用移除项,覆盖 Teams、新版 Outlook、Clipchamp 等 UWP 捆绑软件;
- 另有 feature.json(33 组 Windows 功能)、dns.json(8 组 42 条 DNS 预设,含 Google、Cloudflare、AdGuard 等)、preset.json(自动化预设)。
这种设计的好处是可审计:你对哪个勾选项不放心,直接在 JSON 或官方文档站搜到它对应的注册表操作,不用在几千行脚本里猜。
二、四大板块:装、调、删、修
把功能归一下类,WinUtil 实际上是四个工具的合体。
软件安装(Install/Uninstall) 是最高频的用途。239 个应用按分类折叠排列,勾选后批量安装,底层走 winget install -e --id <包名>,升级则是 winget upgrade --all;还能读取本机已装程序、一键卸载。新装机时勾选浏览器、压缩软件、开发工具这一组,喝杯咖啡的功夫环境就齐了。
系统调整(Tweaks) 是核心也是风险最集中的地方。480 项里既有关闭遥测、显示文件扩展名、禁用锁屏这类无害的个性化,也有停用服务、关闭磁盘索引、移除 Edge 这类需要理解后果的操作。项目把它们分成 Essential Tweaks 和 Advanced Tweaks,后者在文档目录里直接用 z--Advanced-Tweaks---CAUTION 命名,提醒你这是高危区。
预装清理(Appx) 针对 Windows 自带的 UWP 应用,比手动在设置里卸载更彻底,还提供 AppxDefault 预设批量处理。
修复与更新(Fixes/Updates) 则是工具箱属性:网络重置、NTP 时间同步、修复损坏的 winget、DISM/SFC 系统修复,以及把 Windows Update 切成默认、仅安全更新或禁用三种策略,还能管理 SSH 服务、Hyper-V、WSL、沙盒等可选功能。
三、一行命令背后:单文件是怎么"编译"出来的
irm | iex 看起来像魔法,其实背后是一套清晰的构建发布链路。我读了 Compile.ps1 和 GitHub Actions 工作流,把它还原出来:

第一步,源码仓库里函数、配置、界面是分开维护的;第二步,Compile.ps1 把 functions/ 下所有 ps1 拼接起来,把 config 里的 JSON、239 个图标转成 base64 内嵌,再把 XAML 界面和无人值守 XML 一起注入,生成单个自包含的 winutil.ps1;第三步,GitHub Actions 在 Windows runner 上自动编译、签名并发布;第四步,用户那行 irm(Invoke-RestMethod)把脚本拉到内存,iex(Invoke-Expression)直接执行,不落盘就能弹出 GUI。
理解这条链路,才能看懂它的安全含义。irm|iex 是 PowerShell 圈常见的内存执行方式,便利的代价是:你等于把管理员权限交给了一个远程脚本。短链 christitus.com/win 指向的是官方发布产物,来源可信,但这类模式也常被恶意软件模仿。我的建议是:谨慎的用户可以先把 winutil.ps1 下载到本地通读,或者自己克隆仓库跑 Compile.ps1 构建,确认内容后再执行,而不是无脑粘贴任意来源的一行命令。
四、安全设计:它怎么防止你把系统改坏
敢动注册表和系统服务的工具,光有功能不够,得有后悔药。WinUtil 在这方面做了几层设计,我在源码里逐一核对过。

第一,系统还原点先行。 在 tweaks 按钮的执行逻辑里,还原点(WPFTweaksRestorePoint)被安排在所有修改之前创建——代码注释明确写着"The restore point has to be taken before anything else changes"。Advanced 预设默认就包含这一项。
第二,注册表操作记录原始值。 我统计了 tweaks.json,69 组里有 49 组带 OriginalValue 字段,配合 Invoke-WPFundoall 可以一键回退所选调整;对于原本不存在的键,OriginalValue 标记为 <RemoveEntry>,撤销时直接删除而非写入错误值。
第三,高危项物理隔离。 Advanced/CAUTION 类调整和普通优化分区展示,像移除 Edge、卸载 OneDrive、禁用 IPv6、关闭搜索索引这些可能影响日常使用的操作,不会混在"推荐项"里被误勾。
第四,测试兜底。 63 个 Pester 测试覆盖了 tweak 逻辑、Appx 移除、runspace 生命周期、DNS、BitLocker 等关键路径,CI 会跑编译检查和单元测试,降低改坏核心逻辑的概率。
但工具能做的只是降低风险,不能消除风险。有几点你仍需自己把关:它必须以管理员权限运行、影响整机;注册表和服务调整在不同 Windows 版本上效果可能有差异;移除 Appx 有时会牵连商店组件更新;而删 Edge、去 OneDrive 这类操作很难完全逆转。企业办公机尤其不要直接套用"去臃肿 + 禁用更新"组合。
五、三档预设:不打开界面也能批量装机
对需要批量部署的人,WinUtil 提供了命令行预设,不用点 GUI:

我核对了 preset.json 的实际内容:Minimal 只含 4 项(关遥测、关消费者功能、优化服务、禁用 WPBT),最保守;Standard 含 12 项,加上位置、活动历史、磁盘清理、临时文件、任务栏增强等,是面向多数人的平衡默认;Advanced 含 17 项,在 Standard 基础上默认先建还原点再做更深的系统级调整。用 & ([ScriptBlock]::Create((irm https://christitus.com/win))) -Preset Standard 就能无界面套用,适合写进装机脚本。每个预设具体改了什么,JSON 和文档全部公开,没有黑箱。
六、祛魅:免费开源之外,还有个付费的 .NET 版
最后说清楚一个容易混淆的点。这个 PowerShell 版 WinUtil 是 MIT 协议、完全免费开源的;作者同时在自家商店卖一个更快的 .NET 实现版本(Windows Toolbox),月度赞助者还能获得访问权。两者是不同的产品,不要以为 GitHub 上这个开源版功能受限、要付费解锁——核心的安装、调整、修复、更新能力在开源版里一应俱全,付费版只是另一条技术路线和支持方式。
另外它依赖 winget(系统自带,坏了工具里也有修复按钮),部分企业环境会限制 Microsoft Store 和 winget,这种场景要先评估网络和策略。
我的判断
WinUtil 能拿到 6.6 万 Star,靠的不是噱头,而是把"装机后调优"这件高频琐事工程化了:数据与逻辑分离让每一项改动可审计,还原点 + 原始值 + Undo 给了后悔药,Pester 测试和分级设计控制了质量与风险,预设又满足了批量部署需求。对喜欢掌控自己系统的用户和运维人员,它确实是难得的趁手工具。
但请记住两条使用纪律:一是只用官方来源的命令,对 irm|iex 保持本能警惕;二是从 Minimal/Standard 预设起步、先建还原点,Advanced 里的每一项都弄明白再勾。 工具把能力和透明度都给你了,最终按下回车的责任,还是在你自己手里。