Ansible: Windows Server ターゲットで PowerShell スクリプトを実行する3つの方法

Ansible の Windows Server Target で PowerShell スクリプトを実行する、次の3パターンの方法を説明します。

PowerShellスクリプトの内容によっては、Ansible の特徴のひとつである冪等性が保たれなくなります。

Playbook 内に書いたスクリプトを実行

下の図のように、Playbook の中に直接 PowerShell スクリプトを書いて、それを Target サーバー上で実行する方法です。

win_shell モジュールを使います。

---
- name: Test Playbook
  hosts: 192.168.1.1

  tasks:
  - name: Run shell
    win_shell: |
      $ret = Test-Path -Path C:\tmp
      if ($ret) {
        Remove-Item -Path C:\tmp -Force
      }

win_shell モジュールは、書かれた内容を Target の PowerShell で実行します。
1~3行程度であればこの方法でいいと思いますが、スクリプトの長さがそれ以上になる場合は、ps1ファイルにして、次のような実行方法があります。

Ansible Controller 上に置いた ps1 ファイルを Target で実行

下の図のように、Ansible Controller 上にある test.ps1 を、Target サーバー上で実行する方法です。

Ansible exec script 2

実行するスクリプトが ./scripts/test.ps1 にあるとして、下のようにscript モジュールを使用して実行します。

---
- name: Test Playbook
  hosts: 192.168.1.1

  tasks:
  - name: Run ps1
    script: ./scripts/test.ps1

Target サーバ上にあるスクリプトファイルを Ansible Controller から実行

下の図のように、Target サーバー上にある test.ps1 を、Ansible Controller から実行する方法です。

実行するスクリプトが C:\test.ps1 にあるとして、下のようにwin_shell モジュールを使用して実行します。

---
- name: Test Playbook
  hosts: 192.168.1.1

  tasks:
  - name: Run ps1
    win_shell: C:\\test.ps1

ファイルパスの \ は、\\ と書く必要があります。

以上が、Ansible の Windows Server ターゲットで、PowerShell を実行する方法です。