电脑必备
部署包里混着 MSI 和 EXE,静默安装我拆成两条脚本才跑通
81 0 13
先说结论:批量装软件别指望一条命令通吃,MSI 和 EXE 必须分开处理。上周给一批新机器推部署包,踩了坑,记录一下。
场景
部署包里 9 个软件,4 个 MSI、5 个 EXE。一开始图省事,统一写 setup.exe /S,结果 4 个 MSI 装完重启后一个没生效,事件日志里干干净净,连报错都没有。
实测过程
环境:Win10 22H2 三台机(一台虚拟机、两台实体),脚本跑完逐台核对已安装列表,只认「程序和功能」里的条目,不看安装目录是否存在——有的安装包只解压不注册,目录在但没装上。
- MSI 类:必须走
msiexec /i xxx.msi /qn /norestart,加/l*v install.log留日志。用setup.exe /S传参给 MSI 时,部分封装包会把参数吃掉,等于什么都没干。 - EXE 类:参数五花八门,
/S、/silent、/VERYSILENT都见过,甚至同一个厂商不同版本参数还不一样。我的做法是装之前先看安装包属性里的签名信息和厂商文档,拿不准就先用/S在虚拟机跑一遍看有没有弹窗。
数据对比
同一批 9 个软件,三台机器:
| 方案 | 装成数 | 平均耗时 |
|---|---|---|
统一 setup.exe /S | 5/9 | 约 3 分钟 |
| MSI/EXE 分开两条脚本 | 9/9 | 约 4 分钟 |
多花 1 分钟,省下一轮返工。批量部署最怕的不是慢,是装了一半没装上的静默失败。
两个细节
- 每条
msiexec后面都跟/norestart,重启统一放到脚本最后一次性做,不然中途重启会打断后面的安装。 - 脚本结尾加一步核对:调
wmic product get name(或 PowerShell 的Get-Package)拉已安装列表,跟预期清单 diff,缺了哪个直接打出来。这一步比人眼翻「程序和功能」靠谱多了。
顺带说一句,部署包里那些压缩日志我是用 7-Zip 命令行批量解的,-o 指定输出目录、-y 覆盖不询问,几百个包几分钟搞定,这块确实比图形界面快。
问一句
你们批量部署时,EXE 的静默参数是靠厂商文档确认的,还是像我一样先拿虚拟机试一遍?有没有碰到过文档写 /S、实际得用 /silent 的坑?
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
