失敗談:AnsibleでWindowsをPyAutoGUIできなかった
本日の飲酒コーディングはAnsibleとWindows環境を接合するため、PyAutoGUIでGUI操作をあれこれできないかを試してた。
理屈的にまあそりゃ無理そうなんですが、少しは夢を見たかったんです。内容は無い。
※ 2022/2/08 追記
レジストリを使った自動ログインを設定した上で、レジストリのRunOnceに仕込んでおいたPyAutoGUIを起動させることで、Rebootをトリガに実行することができる。(レジストリは下記。)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
どうしても必要になったら上記手法がある。(この記事を書いたときの知識では上記実現ができていませんでした)
下記は先日までのAnsible記事の拡張。
- name: Run pyautogui win_command: automation.exe args: chdir: C:\\ansibletemp\\packages\\
結果
下みたいな感じ。だめだった。
OSError: screen grab failed
から推察するに、普通にGUIサービスが用意されてないからスクリーンのgrubができずに死んじゃってる。当然だけど辛い。
fatal: [localhost]: FAILED! =>
{ "changed": true, "cmd": "automation.exe", "delta": "0:00:03.067409", "end": "2020-06-13 01:02:42.892784", "msg": "non-zero return code", "rc": 4294967295, "start": "2020-06-13 01:02:39.825375", "stderr": "[15452] Failed to execute script main\r\nTraceback (most recent call last):\r\n File \"main.py\", line 33, in <module>\r\n File \"launcher.py\", line 33, in launch\r\n File \"steps.py\", line 29, in step1\r\n File \"common.py\", line 77, in get_screenshot\r\n File \"lib\\site-packages\\pyscreeze\\__init__.py\", line 135, in wrapper\r\n File \"lib\\site-packages\\pyscreeze\\__init__.py\", line 427, in _screenshot_win32\r\n File \"lib\\site-packages\\PIL\\ImageGrab.py\", line 44, in grab\r\nOSError: screen grab failed\r\n", "stderr_lines": [ "[15452] Failed to execute script main", "Traceback (most recent call last):", " File \"main.py\", line 33, in <module>", " File \"launcher.py\", line 33, in launch", " File \"steps.py\", line 29, in step1", " File \"common.py\", line 77, in get_screenshot", " File \"lib\\site-packages\\pyscreeze\\__init__.py\", line 135, in wrapper", " File \"lib\\site-packages\\pyscreeze\\__init__.py\", line 427, in _screenshot_win32", " File \"lib\\site-packages\\PIL\\ImageGrab.py\", line 44, in grab", "OSError: screen grab failed" ], "stdout": "2020-06-13 22:02:42,206 INFO | Step \"step1\" start.\r\n2020-06-13 22:02:42,206 INFO | Step \"step1\" proc start.\r\n", "stdout_lines": [ "2020-06-13 22:02:42,206 INFO | Step \"step1\" start.", "2020-06-13 22:02:42,206 INFO | Step \"step1\" proc start." ] }
やっぱりどうしてもGUIが必要なら作るしか無いか… PowerShellのExtensionで実現する方法もあるみたいだけど…