win_command 経由で exe を起動する際の Ansible の問題

win_command 経由で exe を起動する際の Ansible の問題

現在、Fusion Inventory Agent をアンインストールし、GLPI エージェント 1.4 を Windows Server 2016-2022 に展開するプレイブックを作成しています。以下で説明するすべてのテストでは、すべてのサーバーで管理者権限を持つドメイン アカウントを使用します。

(私は新しくアップグレードした Debian 11 で ansible core 2.12.10 + python 3.9.2 を実行しています)

  • Fusion Inventory エージェントのアンインストーラー レジストリ パスは"C:\Program Files\FusionInventory-Agent\Uninstall.exe"次の場所にあります。オプションを使用して cmd/powershell から手動で実行すると、/SUAC の Yes/No ポップアップが表示されるので、[はい] を押すとエージェントがアンインストールされます。

  • ここで、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 を使用) を作成して、必要なアンインストーラーとオプションを起動し、ユーザー名を指定してトリガーし、それを 1 回実行するだけです。

バイパスではあるが、かなりうまく機能する

関連情報