Ich schreibe derzeit ein Playbook zur Deinstallation des Fusion Inventory Agent und zur anschließenden Bereitstellung des GLPI-Agenten 1.4 auf Windows Server 2016-2022. Für alle unten beschriebenen Tests verwende ich mein Domänenkonto, das über Administratorrechte auf allen Servern verfügt.
(Ich verwende Ansible Core 2.12.10 + Python 3.9.2 auf einem frisch aktualisierten Debian 11)
Der Registrierungspfad des Deinstallationsprogramms für den Fusion Inventory Agent befindet sich unter .
"C:\Program Files\FusionInventory-Agent\Uninstall.exe"
Wenn ich ihn also manuell über cmd/PowerShell mit/S
der Option ausführe, erhalte ich ein Ja/Nein-UAC-Popup und deinstalliere den Agenten, wenn ich auf „Ja“ drücke.Wenn ich jetzt mit der rechten Maustaste klicke und meine cmd/powershell.exe als Administrator ausführe, kann ich sie
"C:\Program Files\FusionInventory-Agent\Uninstall.exe /S"
problemlos ohne UAC starten, das ist normal.
Aus Ansible-Sicht, wenn ich die folgende Aufgabe verwende:
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
Es geht so:
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": []
}
ABER es deinstalliert tatsächlich nichts. Es scheint, dass Ansible den Befehl erfolgreich startet, aber das Ergebnis nicht abfängt.
Ich habe auch verschiedene Dinge ausprobiert, um zu prüfen, ob sich etwas ändert (powershell.exe innerhalb von cmd starten, von psexec aus …), aber die Ergebnisse schlagen fehl oder „ändern sich“, aber uninstall.exe wird nicht wie vorgesehen gestartet.
Wie handhabt man diese Art der Deinstallation aus Ansible-Sicht?
Beste grüße
Gael
Antwort1
Schließlich bin ich zu einer anderen Lösung gekommen: Ich habe einfach eine geplante Windows-Aufgabe erstellt (immer noch mit Ansible), um das Deinstallationsprogramm und die benötigte Option zu starten, dann einen Benutzernamen angegeben, es ausgelöst und einmal ausgeführt.
Es ist ein Bypass, funktioniert aber ziemlich gut