如何获取Ansible win_package模块所需的Beyond Compare的product_id?
如何为Beyond Compare获取ansible.windows.win_package所需的product_id实现幂等安装?
我正在自动化安装30多款软件,包括7-zip、Adobe Reader、Beyond Compare等。前两款已经找到可用的product_id,其中Adobe Reader是反复查找注册表后成功获取的。但处理Beyond Compare时遇到了瓶颈:
- 花了数小时查找注册表、尝试各种值,
win_package模块仍因无法识别product_id而重复安装 - 尝试过寻找MSI文件,但Beyond Compare似乎没有对应的MSI安装包
- 试过
winget、Get-WmiObject等PowerShell命令收集安装信息,依然没有结果
我的疑问:
- 我遗漏了什么?
- 是否有其他方法获取无MSI安装程序的
product_id,或在安装后获取该值? - 让这个模块实现幂等性是否毫无可能?
我的Ansible任务代码:
- name: Install Beyond Compare ansible.windows.win_package: path: C:\temp\BCompare-4.4.3.26655.exe product_id: ? arguments: /VERYSILENT /NORESTAR
我尝试过的product_id值:
BCompareBeyondCompareScooter SoftwareBeyond Compare 4Beyond Compare 4.4.3
解决思路
1. 查找Beyond Compare的卸载注册表项
很多非MSI格式的exe安装程序会在系统注册表的特定路径创建卸载条目。安装Beyond Compare后,打开PowerShell执行以下命令:
Get-ChildItem -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object {$_.DisplayName -like "*Beyond Compare*"} | Select-Object DisplayName, UninstallString, PSChildName
命令输出中的PSChildName字段,通常就是可以用作product_id的标识——不少非MSI程序会用这个注册表键名作为产品识别ID,而非传统MSI的GUID格式。
2. 用自定义检测逻辑绕过product_id限制
如果确实找不到可用的product_id,可以通过检测主程序文件是否存在来实现幂等性,结合win_stat和win_package模块使用:
- name: Check if Beyond Compare is installed ansible.windows.win_stat: path: C:\Program Files\Beyond Compare 4\BCompare.exe register: bcompare_installed - name: Install Beyond Compare ansible.windows.win_package: path: C:\temp\BCompare-4.4.3.26655.exe arguments: /VERYSILENT /NORESTAR when: not bcompare_installed.stat.exists
这种方式直接通过目标文件的存在状态判断是否需要执行安装,完全绕过product_id的限制,实现可靠的幂等。
3. 尝试提取安装包内部文件
部分exe安装包支持静默提取内部文件,执行以下命令尝试提取Beyond Compare安装包的内容:
.\BCompare-4.4.3.26655.exe /extract:"C:\temp\bcompare_extract" /silent
提取后查看是否有隐藏的MSI文件或配置文件,这类文件中可能包含产品标识信息。
4. 了解win_package的非MSI支持逻辑
win_package模块对非MSI程序的幂等性判断,依赖于程序在注册表中创建的标准卸载条目。如果Beyond Compare没有生成符合模块预期的卸载条目,那么通过product_id实现自动幂等确实不可行,此时自定义检测逻辑是最稳妥的方案。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

