Power Automate DesktopによるWeb情報収集自動化を試みた筆者であったが、管理者権限を持たない端末で自動化したいと思った。以前、Raspberry PIを地震アラート端末化してみて"専用端末"のすばらしさを体感したところだが、型落ちしたPCを複数持て余す筆者。これらの再生計画に各PCに専用の機能を持たせたいと目論んでいる。そんな野望にPower Automate DesktopのWeb巡回はピッタリだ。
PowerShellのwhileループによる
条件によりいくつかの方法があるが、筆者の条件で手軽なのが繰り返し処理を行うループを使う方法である。
while ($true) {
・・・(処理)・・・
}
の間の処理に、前回のスクリプトをそのまま入れると、
while ($true) {
Start-Process -FilePath "ms-powerautomate://"
# System.Windows.Forms名前空間の読み込み
Add-Type -AssemblyName System.Windows.Forms
# 10秒スリープ
Start-Sleep 10
# キー操作で「Alt+A」と入力する
[Windows.Forms.SendKeys]::SendWait("%{a}")
#約24時間待機
Start-Sleep -Seconds 86400
}
初回実行からほぼ24時間(86400秒)ごとに実行といった目論見だ。実際にはスリープの10秒も加算されるが、管理権限がなくとも実行できる。ただし、この方法は電源を常時オンにしているマシンでないと実行できない。また、いわゆる無限ループなので注意しなければならない。
PowerAutomateとEdgeのプロセスを起動させるので、短い時間設定をしてしまうとスペックに合わずにPCが重くなりすぎて、制御できなくなったり、フリーズなど意図しない動作になることも。あくまで自己責任で最適なタイミングを割り出す必要がある。
終了するには、実行ターミナルはCtrl+Cでストップ、プロセスを削除するにはタスクマネージャー(Ctrl+Alt+Delete起動)でPowerAutomateのタスクを消す所作を覚えておく必要がある。新たなマシンで実行する場合にはブラウザにPowerAutomateの拡張機能を入れることも忘れてはならない。
処理画面に実行日時を加える
PowerShellコンソールが真っ黒なままだと味気ない。実行される度に日時を表示したいと考えた。
$data = Get-Date
Write-Output $data
で日時を取得し、書き出すのでこれを加えると
while ($true) {
$data = Get-Date
Write-Output $data
Start-Process -FilePath "ms-powerautomate://"
# System.Windows.Forms名前空間の読み込み
Add-Type -AssemblyName System.Windows.Forms
# 10秒スリープ
Start-Sleep 10
# キー操作で「Alt+A」と入力する
[Windows.Forms.SendKeys]::SendWait("%{a}")
#約24時間待機
Start-Sleep -Seconds 86400
}