Ansible PowerShellコマンドの実行結果の日本語が文字化けするという事象がありました。実行結果が分からないのでちょっと困ったということで調べてみましたが、以下の情報がありました。
PowerShell - Ansibleからターゲットノードにファイルを出力するコマンドを実行させると文字化けする|teratail
以下は質問の抜粋です。
Windows の Powershell のコンソール画面で
w32tm /query /status > C:\Users\hogehoge\Desktop\test.txt
のコマンドを実行すると、デスクトップにあるtest.txtに時刻同期の情報が書き出されます。
しかし、Ansible からターゲットノードに対して全く同じコマンドを実行させると、文字化けした状態でファイルに書き出されます。
どうすれば文字化けしない状態で書き出すことができるでしょうか。
以下、Ansible で実際に実行したタスクです。
- name:
win_file:
path: C:\Users\hogehoge\Desktop\test.txt
state: touch- name:
win_shell: w32tm /query /status > C:\Users\hogehoge\Desktop\test.txt
私も同様にPowerShellで文字化けされました。
回答にある参考になるURLです。
スライド式なので、こちらも参考になります。
AnsibleNight20180426にいってきた - smallpalace's blog
AtomようのAnsibleぷらぐいんつくったのでつかってね
raw,script,自作モジュールで何とかしていたころには戻れないほど便利になったが CP932をうまくあつかえない(いわゆるSHIFT-JISのこと win_commandからifconfigをたたくと、、文字化け。 PowerShellのセッションがUTF8に固定されてるがWinの古いコマンドだとunicode対応してないとかだと化ける rawつかうと出力が英語でかえってくる locale情報のとりあつかいに差がある?日本語でしか返ってこないコマンドだとだめ
win_shellをつかってnkfをかます chocolateyリポジトリからwin_chocolateyモジュール一発でインストールできる
カスタムWIN_COMMANDモジュールを作る Powershellのファイル読み込み関数get-contentではエンコード指定できるのでそれつかう
色々と工夫をしてみましたが、難しかったです。私の場合は、コマンドを変えることで解決しましたが、このあたり、文字コードが変換できるとか、改善されるといいですね。
![]() |