Ansible の Windows Server Target で PowerShell スクリプトを実行する、次の3パターンの方法を説明します。
- Playbook 内に書いたスクリプトを実行
- Ansible Controller 上に置いた ps1 ファイルを Target で実行
- Target サーバー上にあるスクリプトファイルを Ansible Controller から実行
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 サーバー上で実行する方法です。
実行するスクリプトが ./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 を実行する方法です。