この記事は Node-RED Advent Calendar 2023 の 6 日目の記事です。Power Automate Desktop のデスクトップフローを Node-RED で実行するメモです。
今回の記事の実行状況
以下のような環境で、やってみます。
- Windows 11 Pro
- Power Automate Desktop 10.0.8109.0 x64
- Power Automate にプレミアムユーザーでログインしていること
- ローカルにインストールした Node-RED 3.1.0
Power Automate Desktop はフローをコマンド実行できる
URL またはデスクトップ ショートカットでデスクトップ フローを実行する – Power Automate | Microsoft Learn
こちらにあるように、Power Automate Desktop はコマンド実行できます。要素として「Power Automate Desktop のパス」「ms-powerautomate:/ ではじまる 環境 ID とタスク名 のURL」が必要なようです。
また Power Automate はプレミアムユーザーでないと、うまく実行が発動しなかったので、ご注意ください。
今回のフロー
今回使う Power Automate Desktop のフローはこちらです。
実行してみると、シンプルにメッセージウィンドウが表示されます。
Power Automate Desktop のパス
私の場合は Power Automate Desktop アプリケーションの置き場所が MSI インストールでしたが、
このように、はじめは思ったような場所になかったですが、頑張って探しまして、
C:\Program Files\WindowsApps\Microsoft.PowerAutomateDesktop_10.0.8109.0_x64__8wekyb3d8bbwe\PAD.Console.Host.exe
にありました。これ 10.0.8109.0_x64 あとあるので更新されてバージョンが変わってしまうと置き場所が変わるんじゃないかという懸念はありますが、一旦は気にしません。
ms-powerautomate:/ ではじまる 環境 ID とタスク名 のURL
環境 ID については、こちら にあるようにポータルで自分の環境を把握しました。
タスク名は workflowName=[workflowName]
という形で呼べるので、今回のフロー名だと test なので ms-powerautomate:/console/flow/run?environmentId=[environmentId]&workflowName=test
としました。[environmentId]
は、今回実行したい環境 ID になります。
そのほかに Power Automate Desktop で手元のアプリで起動して、動かしたフローを選択した状態で、フローのプロパティから「URL を実行」欄をコピーすることでも得られます。
コマンドプロンプトで一度試す
コマンドプロンプトを起動して、一回試します。Node-RED の exec ノードも内部はコマンドプロンプトを実行してるので、ほぼ同様の挙動確認です。
"C:\Program Files\WindowsApps\Microsoft.PowerAutomateDesktop_10.0.8109.0_x64__8wekyb3d8bbwe\PAD.Console.Host.exe" "ms-powerautomate:/console/flow/run?environmentId=[environmentId]&workflowName=test"
このようなコマンドを実行すると、
このようにフローが動作しメッセージが表示されました。
ローカルの Node-RED のフロー
では、動かし方ははっきりしたので、ローカルの Node-RED の exec ノードで動かしてみます。
このようなフローです。
こちらの change ノードは以下のようなプロパティになっています。
exec ノードではコマンドを設定していないので、こちらのノードに「コマンドプロンプトで一度試す」で動かしたコマンドを入れておきます。
exec ノードは、標準出力・標準エラー出力・返却コードそれぞれに debug ノードをつけています。
exec ノードのプロパティは、なにも設定せずに、先ほどお伝えした手前の change ノードのコマンドの内容が入っている msg.payload をそのまま実行する仕組みです。
ローカルの Node-RED で実行してみる
inject ノードをクリックして実行してみます。
debug ノードはこのように反応しました。
無事、さきほどの Power Automate Desktop のデスクトップフローが動きました!
これができると MQTT に反応してローカルの仕組みを動かしたり、inject ノードの定期実行機能で良い感じにスケジュール実行できそうなのです!