川獺の外部記憶

なんでも残しておく闇鍋みたいな備忘録

失敗談: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で実現する方法もあるみたいだけど…