このページの本文へ

前へ 1 2 次へ

Windows Info 第280回

Windows PowerShellからスクリプトの完了をトースト通知で知らせる

2021年06月20日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 少し時間のかかる作業をスクリプトに行なわせたとき、終了したら適当に通知しておいてほしいことがある。ただ、別の作業をしているので、いきなりメッセージボックスが画面に現れるというのも問題が生じる。

Windows PowerShellからもトースト通知を表示できる。時間のかかる処理や、緊急ではないエラー通知などに使うと、作業を邪魔しない

 Windows 10でそういうときに便利なのが、トースト通知だ。トースト通知は、表示したときにフォーカスを持たないため作業を邪魔しないし、アクションセンターに履歴が残るため、あとで確認もできる。

トースト通知は、アクションセンターに履歴が残るので、見逃しても作業の終了やエラーなどを確認できる

 Windowsのトースト通知は、ToastNotificationと呼ばれ、かつてはUWPアプリケーションだけが利用できたが、その後、Windows PowerShellからも利用できるようになった。なお、通知の表示時間などトースト通知に関する設定については、以下の記事を参照してほしい。

●Windows 10で結構表示される通知を整理してアクションセンターをスッキリ
 https://ascii.jp/elem/000/001/114/1114188/

まずは簡単なところから試してみる

 以下のリストは、Windows PowerShellからトースト通知をするスクリプトだ。残念ながら、このスクリプトはPowerShell 7では動作しない。不可能ではないのだが、ちょっと面倒な作業が必要になるため、記事での掲載は諦めた。少なくともWindows 10ならばWindows PowerShellは標準で含まれているので、そちらで試してほしい。

$AppId = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe";
$template=
[Windows.UI.Notifications.ToastNotificationManager,Windows.UI.Notifications, ContentType = WindowsRuntime]::GetTemplateContent(
    [Windows.UI.Notifications.ToastTemplateType, Windows.UI.Notifications, ContentType = WindowsRuntime]::ToastText01);
$msg="ASCII.JP`nWindows Info";
$template.GetElementsByTagName("text").Item(0).InnerText=$msg;
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($template);

 5行目の$msgを設定しているダブルクオートの中身を書き換えると表示されるメッセージを書き換えることができる。ダブルクオートの中にある「`n」は、PowerShellでの「改行文字」である。試すだけなら、Windows PowerShellを起動して、このリストをコピーして貼り付ける。繰り返し実行したいときには、5行目のように$msgに表示させたい文字列を指定して、6行目、7行目を再実行すればよい。

簡単に仕組みを解説する

 とはいえ、中身もわからずに使うのもキモチが悪いだろう。仕組みには興味がないというのであれば、ここは読み飛ばしてかまわない。ということで簡単に解説しておく。

 まず、トースト通知を使うには、アプリケーションID(AppIDやAUMIDなどと呼ばれる)が必要になる。これは、Windows PowerShellのAppIDを使う(リスト1行目)。Windows PowerShellを使う限り、ここは書き換える必要はない。

 2~4行目は、$templateという変数にトースト通知のテンプレートを取得しているもの。クラス指定が長くて面倒そうだが、実際には「GetTemplateContent」というメソッドに、「ToastText01」という値を渡しているだけだ。このテンプレートについては、Microsoftの以下のページにサンプルがある。

●The toast template catalog
 https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh761494(v=win.10)

 クラス指定が長いのは、それがWinRT側のクラスだからである。

 GetTemplateContentの戻り値を受け取る変数$templateは、

<toast>
    <visual>
        <binding template="ToastText01">
            <text id="1"></text>
        </binding>
        </visual>
</toast>

というXMLデータになっていて、「<text id="1">」と「</text>」で挟まれた部分にメッセージを書き込む必要がある。それが6行目だ。最後の7行目は、トースト通知を表示させるためのものだ。

 なお、すでに画面にトースト通知があると、同じアプリからの通知は表示を待たされるので、何回も繰り返すときには、前の通知を消しておく必要がある。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン