毎日行わなければならない手短な業務タスクを何らかの理由により、忘れてしまうことは誰しもあることだ。しかし出勤簿や日報のような類のものからメールや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付きで保存する。

  • testMorning.ps1としてUTF8のBOM付きで保存

    testMorning.ps1としてUTF8のBOM付きで保存

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

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

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

  • 上記スクリプトの実行画面。

    上記スクリプトの実行画面。

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

数字 アイコン 意味
0 なし ノーマル
1 (Information)
2 (Warning)
3 エラー(Error)
  • $task.ShowBalloonTip(3000, "9時通知", "おはようございます。9時です。", 2)  とすることで、黄色のWarningでよりアテンションを高めてみた

    $task.ShowBalloonTip(3000, "9時通知", "おはようございます。9時です。", 2)  とすることで、黄色のWarningでよりアテンションを高めてみた

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

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

  • Win+Rから[ファイル名を指定して実行]

    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ファイルのなかを変えるだけで、タスクスケジューラーはいじらなくていいところがとても便利だ。使える方法だと思うた。