Windowsの画面ロックを回避する

テレワークということもあり、セキュリティを考慮して特定時間が経過すると強制的に画面ロックならびにシャットダウンがされてしまう端末で仕事をしているが、やはりいちいちロックされるのは面倒くさい。
定期的にキーボードから自動入力する方法はないかなーと探していたら、PowerShellにsendkeysというコマンドがあることを知った。

docs.microsoft.com


以下、Microsoftのリファレンスより

アクティブなアプリケーションにキーストロークとキーストロークの組み合わせを送信します


これ使えばプログラムから疑似的にキーボード操作ができるってことか?
と思ったけど、そもそもWindowsの無操作判定ってどうやってやっているんだろうか・・・。
外部デバイスからの入力信号の検知を基準にしているのだとしたら、
いくらプログラムが頑張ったところで意味ないのでは、と思いながらも試してみると、、、

$shell = New-Object -Comobject wscript.shell
$shell.Run("notepad")

for ($i=0; $i -lt 10000; $i++) {
  sleep 60

  $date = Get-Date -Format "yyyy-MMdd-HHmm_ss"
  $shell .sendkeys("$date ")


回避できた!


ただ、一つだけ難点があって
テレワークにはありがちな多重RDPの場合、
そのプログラムが動いている端末でしか効果がない。まぁよく考えれば当たり前だけど。
ここが実際に物理デバイスから信号を送るのと大きく異なる点ではある。

マウスやキーボードのような物理デバイスの場合は、
機器が接続されている大元の端末がまず信号を受け取って、
それを常時リモートへ転送しているので、
バイスから入力すれば勝手に末端の端末まで信号が届く。

ただ前述のようなプログラムで疑似的に入力する場合は、
外部デバイスドライバを介さないため、末端の端末で実行してしまうとそこのロックしか回避してくれない。


ということは大元でプログラムを実行すればいいのかなーと思ったけど
シンクラということもあってPowerShellが入ってない・・・。
別の手段を考えなくては。