我目前正在編寫一本有關卸載 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 似乎成功啟動了命令,但沒有捕獲結果。
我還嘗試了不同的方法來檢查它是否更改了某些內容(從psexec 在cmd 中啟動powershell.exe ...),但結果失敗或“更改”,但它沒有按應有的方式啟動uninstall. exe。
從 Ansible 的角度來看,如何處理這種卸載?
此致
蓋爾人
答案1
最後我得到了一個不同的解決方案:剛剛建立了一個Windows排程任務(仍然使用ansible)來啟動我需要的卸載程式和選項,然後指定一個用戶名,觸發器並運行一次。
這是一個旁路,但效果很好