毎日行わなければならない手短な業務タスクを何らかの理由により、忘れてしまうことは誰しもあることだ。しかし出勤簿や日報のような類のものからメールやSlackの返信などの遅延で怒りを買うと、刑務官の怒号のような文言が飛んでくるかもしれない。
トラブルは避けたいものである。

いずれにせよ、付箋やカレンダーとは異なる方法で"アテンション プリーズ(Attention, please)"をワークエリアで手軽に行えないか?考えてみた。以前(記事)、Power Automate Desktopで毎朝"起動時"にWeb巡回するフローをスタートアップフォルダで構築してみたが、ちょっとしたアテンションを手軽に行うには、少々仰々しい。
○PowerShell&.NETでNotify(通知)する

いくつかの方法があるがワークエリアのWindows環境では、インストールできる材料が限られる。筆者はPowerShell 7と.NET Framework v4がデフォルトで使えるため、この環境で使えそうなものを調べると、System.Windows.Forms.NotifyIcon(MicrosoftAPIリファレンス)がある。PowerShellで呼び出す方法を調べると数行で可能だ。Add-Type -AssemblyNameでクラスを読み込み、New-ObjectでNotifyIconのインスタンスを作成し、ShowBalloonTipを表示させる。

Add-Type -AssemblyName System.Windows.Forms

[System.Windows.Forms.NotifyIcon]$task = New-Object System.Windows.Forms.NotifyIcon
$task.Icon = [System.Drawing.SystemIcons]::Information
$task.Visible = $true
$task.ShowBalloonTip(3000, "9時通知", "おはようございます。9時です。", 1)
Start-Sleep -Seconds 5
$task.Dispose()

上記のスクリプトをtestMorning.ps1としてUTF8のBOM付きで保存する。

次に、PowerShellで以下のように保存したスクリプトを実行して動作を確認する。

powershell -ExecutionPolicy Bypass -File "C:\Users\●●●\Desktop\testMorning.ps1"

すると、次にようにデスクトップの右下から通知が出る。


ミリ秒で表示時間、次に見出しワード"9時通知"と本文 "おはようございます。9時です。"を指定しているが、その次のパラメーターでアイコンを変えられる。

○タスクスケジューラーで定期実行を設定する

タスクスケジューラーは使える環境なので、Win+Rから[ファイル名を指定して実行]を呼び出し、

taskschd.msc

を入力してOKを押すとタスクスケジューラーが起動するので、「基本タスクの作成」をクリックし、名前と説明を記載し[次へ]を順次クリックしていく

「プログラムの開始」ではPowershell("C:\Program Files\PowerShell\7\pwsh.exe")へのパスと引数のオプションには、-ExecutionPolicy Bypass -File "C:\Users\●●●\Desktop\testMorning.ps1"とps1ファイルへのパスを入れる。

○設定したらテストしよう

"絶対"というものは宇宙が無限/未解明であるかぎり相対的なものである。つまりない。予期せぬエラーや意図せぬエラーは起こるものである。筆者の環境では、PS1がBOM付UTF8でないとアラートが文字化けしてたがテストして気が付いたものだ。しっかりとテストしておこう。設定が完了するとタスクスケジューラーライブラリに並ぶので、右クリックし[実行する]を選択する

実行されたが、表示時間が3秒(3000)では短い。席を外すことも考慮して100倍の300秒(300000)、文言もより注意をひくものにカスタマイズしてみよう

task.ShowBalloonTip(300000, "9時通知", "おい貴様、起きろ!朝9時だ。朝の提出物チェックしろ!!!!!", 1)

こういう強権的な言い方をされると、注意をひけども気分が悪いものだ。
文言は自在である。穏やかで、冷静かつWin-Winな関係を築けそうな文言/アイコンバリエーションを増やしてみよう。ps1ファイルのなかを変えるだけで、タスクスケジューラーはいじらなくていいところがとても便利だ。使える方法だと思うた。
編集部おすすめ