В настоящее время я пишу руководство по удалению Fusion Inventory Agent и последующему развертыванию GLPI agent 1.4 на Windows Server 2016-2022. Для всех тестов, которые я подробно опишу ниже, я использую свою учетную запись домена, которая имеет права администратора на всех серверах.
(Я запускаю ansible core 2.12.10 + python 3.9.2 на недавно обновленном Debian 11)
Путь реестра для удаления агента 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 успешно запускает команду, но не получает результат.
Я также пробовал разные вещи, чтобы проверить, меняет ли это что-то (запускал powershell.exe из cmd, из psexec ...), но результаты не удались или «изменились», но uninstall.exe не запускается, как должно быть.
Как с точки зрения Ansible справиться с таким типом удаления?
С наилучшими пожеланиями
Гаэль
решение1
В конце концов я пришел к другому решению: просто создал запланированную задачу Windows (все еще используя ansible) для запуска деинсталлятора и нужной мне опции, затем указал имя пользователя, триггер и запустил ее один раз.
Это обходной путь, но работает довольно хорошо.