未知Installation ID时,如何更新单个安装及批量更新模板?
嘿,我来帮你解决这两个日常管理安装项时常见的问题,下面是具体的可行方案:
1. 未知Installation ID时更新指定安装项
首先你得先定位到目标安装项的ID,其实很多时候不用硬找ID,直接通过软件名称也能更新,但如果必须用ID的话,按以下步骤来:
- 枚举所有安装项的关键信息:根据你的操作系统或包管理工具,用命令列出所有已安装项目的核心信息。比如:
- Windows系统:用PowerShell执行
Get-WmiObject -Class Win32_Product | Select-Object Name, IdentifyingNumber,或者CMD里用wmic product get name,identifyingnumber,输出里的IdentifyingNumber就是你要找的Installation ID。 - Linux Debian/Ubuntu系:执行
dpkg-query -l | grep "软件名称关键词"定位目标包,之后用dpkg-query -s 包名 | grep UUID获取ID;当然更省事的是直接用包名更新:sudo apt install --only-upgrade 包名。
- Windows系统:用PowerShell执行
- 执行更新操作:拿到ID后,用对应的命令更新。要是Windows上的MSI安装包,就可以用
msiexec /i {你的Installation ID} REINSTALL=ALL REINSTALLMODE=omus;如果是用Winget这类工具,甚至不用ID,直接winget upgrade "目标软件名称"就能搞定。
2. 无法获取全部安装包且未知所有Installation ID时统一更新模板
这种情况得分场景处理,给你几个通用的可行方案:
- 借助包管理器批量更新:如果所有安装项都是通过统一的包管理器部署的(比如Winget、Chocolatey、apt、yum),直接用批量更新命令就行,完全不需要知道ID或包的具体信息:
- Winget:
winget upgrade --all - Chocolatey:
choco upgrade all - Linux Debian/Ubuntu:
sudo apt update && sudo apt upgrade -y - Linux RHEL/CentOS:
sudo yum update -y
这些命令会自动扫描所有可更新的项,一键完成批量更新。
- Winget:
- 导出通用模板+脚本批量应用:如果是企业内部自定义的安装项(比如MSI包),可以先从一个已知正常的安装项导出配置模板,再用脚本批量应用:
- 先导出模板:用已知的Installation ID执行
msiexec /a {已知ID} /t template.mst生成MST模板文件。 - 编写脚本枚举所有安装项(用之前提到的枚举命令),然后循环对每个ID执行
msiexec /i {安装ID} TRANSFORMS=template.mst REINSTALL=ALL REINSTALLMODE=omus,实现统一模板更新。 - 如果连枚举ID都做不到,也可以通过匹配软件安装路径(比如所有
C:\Program Files下的目标软件目录),用脚本替换目录里的配置文件(比如模板化的配置项)来完成更新。
- 先导出模板:用已知的Installation ID执行
- 用自动化运维工具统一管控:如果是多台机器的批量场景,用Ansible、Puppet这类工具就很省心。它们会自动发现目标机器上的所有安装项,你只需要写好更新模板的playbook或配置清单,工具就能批量完成所有机器的模板更新,完全不用手动处理ID或包的问题。
内容的提问来源于stack exchange,提问作者Ian Warburton
相关产品推荐
相关产品推荐

