ansible でpowershellを使い windows を操作する(まだ途中です)


windows 10 に移行するために、大量のアカウントをPCに設定するためには役立つ記事です。それ以外はあまり役立つ気はしません。

まず、こちらをよみましょう。AnsibleでWindowsを操作する準備をする

  • つっこみどころ満載ですので、間違いあったらぜひご指摘ください。

ansible から、windows を操作するため

操作マシン(linuxを想定)
  • version 確認: ansible --version
  • ansible には、pywinrm が必要
  • conda instal -c conda-forge pywinrm
  • 対象マシンには原則 administrator ではいります、はいれないときは、別の管理者アカウントではいってください。
  • 権限などの設定は、インベントリファイルのhosts に書いておきます。
  • hosts の例 windows という名前を付与してあります。
# hosts の例
# ansible 192.168.1.xx  -m win_ping  (設定したら ping でチェック)
[windows]
# ip か hostname 
192.168.1.xx
[windows:vars]
ansible_connection=psrp
ansible_port=5986
ansible_auth=basic
ansible_psrp_cert_validation=ignore
ansible_user=administrator
ansible_password=xxx ここにパスワードを書く xxx
対象Windows 設定
  • 動作環境: powershell 5.x 以上 (wiundows 7 は、2.xです。)
  • Powershellの実行ポリシーの変更 : Set-ExecutionPolicy RemoteSigned

- Ansible用WinRMモジュールのインストール 下記で説明

# とりあえず、作業用ディレクトリworkをつくる 
PS C:\> mkdir C:\work
PS C:\> cd .\work

PS C:\work> Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1

PS C:\work> powershell.exe .\ConfigureRemotingForAnsible.ps1

最初は,ping を試します。結果は、どりあえず、/tmp/temp.1 に出力します。

  • playbook のサンプル
  • ansible-playbook -i hosts ping.yml -e "host=192.168.1.xx"
# ファイル名は、ping.yml 
# host は、インベントリ(今回は、hosts) に指定があること 
- hosts: "{{ host }}"
  gather_facts: No
  tasks:
  - name: ping
    win_ping:
    register: result
  - local_action:
      copy content={{ result }} dest=/tmp/temp.1

powershell に引数を渡す

  • 作ったアカウントで、リモート接続できるようにするスクリプトです。
  • ansible から、powershell のスクリプトを呼び出します。
  • playbook から見て files/remote_user_add.ps1 とします。
# remote desktop user に加える
param
(
        [Parameter(Mandatory=$True,Position=1)]
        [string]$remote_user
)
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "$remote_user"
  • 上記 powershell の呼び出す ansible-playbook
- hosts: "{{ host }}"
  gather_facts: false
  tasks:
  - name: powershell
    script: files/remote_user_add.ps1 {{ remote_user }}
    register: result
  - local_action:
      copy content={{ result }} dest=/tmp/temp.1
  • playbook は引数をつけて実行
ansible-playbook -i hosts remote_user_add.yml  -e "host=192.168.1.xx remote_user=hogehoge"

  • これを実行するとリモートデスクトップでuser: hogehoge にアクセスできます。
  • リモートですぐにはいれるようになるので、ちょっと便利な程度です。たくさん設定するときは、便利でしょう。