【Ansible Tower/AWX】WindowsホストでPowerShellを実行する


この記事はプロモーションを含みます。

Ansible

ホーム > Ansible Tower・AWX リファレンス

Ansible(AWX/Tower)環境で、Windowsホストに対して、PowerShellスクリプトを実行する方法を解説します。

はじめに

AnsibleでWindowsホストに対して、PowerShellスクリプトを実行する方法ですが、
以下の2パターンの方法を説明します。

  • コントロールノードに格納したスクリプトを実行する方法
  • ターゲットノードに格納したスクリプトを実行する方法

事前準備(共通)

まずは、事前準備として、以下の作業を行います。
(*Ansibleには、コマンドライン版のAnsibleの他、GUIで使用出来るAWX[Tower(有償版)]がありますが、今回はAnsible AWXを使用します。以降、AWXと表記して進めて行きます)

  • Windowsで実行するPowerShellスクリプトの作成
  • AWXで実行するプレイブックの作成
  • AWX各種定義の設定
    • 認証情報
    • インベントリー
    • テンプレート

AWXの各種定義の設定

ここでは、AWXの各種定義について説明します。

認証情報

今回実行する認証情報の設定になります。

  • 名前:Windows
  • 認証情報タイプ:マシン
  • ユーザー名:Windowsにログインするためのユーザー
  • パスワード:ユーザー名に対応したパスワード

インベントリー

今回実行するインベントリーの設定ですが、AnsibleでWindows機器を操作するための最小限の設定しか行っていませんので、以下を参考にして下さい。

テンプレート

今回実行するテンプレートの設定になります。
テンプレートの設定は任意なので、下記と異なる値を設定しても問題ありません。

  • 名前:7001 Exec PS1 Script
  • 説明:PowerShellスクリプトの実行
  • ジョブタイプ:実行
  • インベントリー:Syutaku Inventory
  • プロジェクト:Syutaku Project
  • PLAYBOOK:PBW002_Exec_PS1_Script.yml
  • 詳細:1(Verbose)

PowerShellスクリプトの作成

ここでは、実行するPowerShellスクリプトを作成します。
格納先がコントロールノードかターゲットノードのどちらかで、
記述内容が少し異なるので、それぞれ説明します。

コントロールノードに格納するPowerShellスクリプトの作成

今回は、PowerShellスクリプトが実行されたことを確認したいので、リダイレクトでファイルを出力するスクリプトを作成します。

echo PowerShell実行確認 > C:\Workspace\WinRM_Test.log

文字列「PowerShell実行確認」を「WinRM_Test.log」として、「C:\Workspace」に出力する簡単なスクリプトになります。
作成したスクリプトは、コントロールノードであるLinux機器のプロジェクト管理ディレクトリに「powershell」ディレクトリを作成して配置して下さい。

ターゲットノードに格納するPowerShellスクリプトの作成

今回は、PowerShellスクリプトが実行されたことを確認したいので、リダイレクトでファイルを出力するスクリプトを作成します。

echo PowerShell実行確認 > $PSScriptRoot\WinRM_Test.log

文字列「PowerShell実行確認」を「WinRM_Test.log」として、カレントディレクトリに出力する簡単なスクリプトになります。
作成したスクリプトは、接続先(ターゲットノード)のWindows端末内に配置して下さい。

AWXで実行するプレイブックの作成

ここでは、実行するプレイブックを作成します。
PowerShellスクリプトを実行するだけの、簡単なプレイブックですが、
格納先がコントロールノードかターゲットノードのどちらかで、
記述内容が少し異なるので、それぞれ説明します。

コントロールノードに格納するスクリプトを実行する場合

---
- hosts: all
  gather_facts: False
  tasks:

  - name: PowerShellスクリプトの実行
    script: ./powershell/WinRM_Test.ps1

ターゲットノードに格納するスクリプトを実行する場合

---
- hosts: all
  gather_facts: False
  tasks:

  - name: PowerShellスクリプトの実行
    win_shell: "C:\\Workspace\\WinRM_Test.ps1"

実行結果

プレイブックの実行結果です。

コントロールノードに格納したスクリプトを実行した場合

Using /etc/ansible/ansible.cfg as config file
SSH password: 

PLAY [all] *********************************************************************

TASK [PowerShellスクリプトの実行] ******************************************************
changed: [192.168.70.200] => {"changed": true, "rc": 0, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP *********************************************************************
192.168.70.200             : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ターゲットノードに格納したスクリプトを実行した場合

Using /etc/ansible/ansible.cfg as config file
SSH password: 

PLAY [all] *********************************************************************

TASK [PowerShellスクリプトの実行] ******************************************************
changed: [192.168.70.200] => {"changed": true, "cmd": "C:\\\\Workspace\\\\WinRM_Test.ps1", "delta": "0:00:00.374109", "end": "2023-02-26 06:23:06.459645", "rc": 0, "start": "2023-02-26 06:23:06.085536", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP *********************************************************************
192.168.70.200             : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

以下のように、PowerShellスクリプトを格納したフォルダに「WinRM_Test.log」が作成されていれば、PowerShellスクリプトが正しく実行されています。
*本記事のサンプルを実行した場合は、コントロールノード、ターゲットノードに関わらず、以下のようにログファイルが作成されます。

Windowsホストでバッチファイルを実行する

バッチファイルを実行する場合は、以下を参考にして下さい。

上手く動かない場合

想定通りに動かない場合、以下を参考にしてみて下さい。

コメント

タイトルとURLをコピーしました