我目前正在编写一个关于卸载 Fusion Inventory Agent 然后在 Windows Server 2016-2022 上部署 GLPI 代理 1.4 的剧本。对于下面详述的所有测试,我都使用在任何服务器上都具有管理员权限的域帐户。
(我在刚刚升级的 Debian 11 上运行 ansible core 2.12.10 + python 3.9.2)
Fusion Inventory 代理卸载程序注册表路径位于,
"C:\Program Files\FusionInventory-Agent\Uninstall.exe"
因此如果我从 cmd/powershell 手动运行它,/S
我会得到一个“是/否”UAC 弹出窗口,所以如果我按“是”,就会卸载代理。现在,如果我右键单击我的 cmd/powershell.exe 并以管理员身份运行,我可以
"C:\Program Files\FusionInventory-Agent\Uninstall.exe /S"
轻松启动而无需 UAC,这是正常的。
从 Ansible 的角度来看,如果我使用以下任务:
tasks:
- name: uninstall fusion inventory agent through cmd
ansible.windows.win_command: '"C:\Program Files\FusionInventory-Agent\Uninstall.exe" "/S"'
become: yes
become_user: my_domain_account
become_method: runas
register: fusion_agent_out
具体如下:
Using module file /usr/lib/python3/dist-packages/ansible_collections/ansible/windows/plugins/modules/win_command.ps1
Pipelining is enabled.
<frhd01inp009> ESTABLISH WINRM CONNECTION FOR USER: mydomain_account@my_domain on PORT 5985 TO my_server
EXEC (via pipeline wrapper)
changed: [server_name] => {
"changed": true,
"cmd": "\"C:\\Program Files\\FusionInventory-Agent\\Uninstall.exe\" \"/S\"",
"delta": "0:00:00.468425",
"end": "2022-11-24 16:32:12.065029",
"rc": 0,
"start": "2022-11-24 16:32:11.596603",
"stderr": "",
"stderr_lines": [],
"stdout": "",
"stdout_lines": []
}
但是,它实际上并没有卸载任何东西,似乎 Ansible 成功启动了命令,但没有捕获结果。
我也尝试了不同的方法来检查它是否改变了某些东西(在 cmd 内启动 powershell.exe,从 psexec...)但结果失败或“改变”但它没有按应有的方式启动 uninstall.exe。
从 Ansible 角度来看,如何处理这种卸载?
此致
盖尔
答案1
最后我得到了一个不同的解决方案:只需创建一个 Windows 计划任务(仍然使用 ansible)来启动我需要的卸载程序和选项,然后指定一个用户名,触发并运行它一次。
这是一个绕过方法,但效果很好