Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellでポップアップやバルーン通知を表示する方法【初心者向け解説】

PowerShellはコンソールベースのスクリプト言語ですが、重いスクリプトの処理完了や重要なイベント発生などを、ユーザーに視覚的に通知したい場面があります。そんなときに便利なのが、ポップアップウィンドウやバルーン通知(トースト通知)の表示です。

この記事では、PowerShellスクリプトからユーザーへ通知を表示する代表的な3つの方法を、実際のコード例とともにわかりやすく解説します。

方法1:Wscript.ShellのPopupメソッドを使う

最も手軽なのは、Windows Script Host(Wscript)をCOMオブジェクトとして呼び出し、メッセージウィンドウを表示する方法です。

以下のコードを実行すると、メッセージと「OK」ボタンが付いたシンプルなダイアログが表示されます。

$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("レポート生成スクリプトが正常に完了しました!")

Popupメソッドの各プロパティを指定することで、モーダルウィンドウの見た目をカスタマイズできます。さらに、ユーザーが押したボタンの回答(はい/いいえ など)をスクリプト側で受け取ることも可能です。

$Output = $wshell.Popup("レポート生成スクリプトが正常に完了しました!画面にレポートを表示しますか?",0,"レポート準備完了",4+32)

Popupメソッドの構文とパラメータ

Popup(<Text>,<SecondsToWait>,<Title>,<Type>)
  • <Text> — 表示するメッセージ本文(文字列)
  • <SecondsToWait> — 数値(省略可)。指定秒数後にウィンドウを自動的に閉じる
  • <Title> — 文字列(省略可)。ポップアップウィンドウのタイトル
  • <Type> — 数値(省略可)。ボタンの種類とアイコンを決定するフラグの組み合わせ

Typeフラグに指定できる主な値

  • 0 — 「OK」ボタンのみ
  • 1 — 「OK」「キャンセル」ボタン
  • 2 — 「中止」「再試行」「無視」ボタン
  • 3 — 「はい」「いいえ」「キャンセル」ボタン
  • 4 — 「はい」「いいえ」ボタン
  • 5 — 「再試行」「キャンセル」ボタン
  • 16 — 警告(停止)アイコン
  • 32 — 問い合わせ(疑問符)アイコン
  • 48 — 警告(感嘆符)アイコン
  • 64 — 情報アイコン

Popupメソッドの戻り値

Popupメソッドは整数値を返し、ユーザーがどのボタンをクリックしたかを判別できます。

  • -1 — タイムアウト(自動的に閉じられた)
  • 1 — 「OK」ボタン
  • 2 — 「キャンセル」ボタン
  • 3 — 「中止」ボタン
  • 4 — 「再試行」ボタン
  • 5 — 「無視」ボタン
  • 6 — 「はい」ボタン
  • 7 — 「いいえ」ボタン

方法2:Windows Forms APIでバルーン通知を表示する

Windows 7 / 8.1 / 10では、Windows Forms APIを使うことで、より見栄えの良いバルーン通知(ポップアップメッセージ)を表示できます。以下のコードは、Windows 10の通知領域の近くにバルーンを表示し、20秒後に自動的に消える例です。

Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = 'これはWindows 10ユーザーへのポップアップメッセージです'
$balmsg.BalloonTipTitle = "注意 $Env:USERNAME"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(20000)

方法3:BurntToastモジュールでカラフルなトースト通知を表示する

Windows 10(PowerShell 5.0以降)では、PowerShellギャラリーで公開されているBurntToastモジュールを使うと、デザイン性の高いトースト通知を簡単に作成できます。

モジュールはオンラインリポジトリから次のコマンドでインストールできます。

Install-Module -Name BurntToast

インストール後は、たった1行でカラフルな通知を追加できます。たとえば、「Ethernetケーブル接続時にWi-Fiを自動的に無効化する」ようなスクリプトに、次のような通知を組み込めます。

New-BurntToastNotification -Text "Wi-Fiネットワークから切断しています", "デバイスが高速なEthernet LANに接続されたため、Wi-Fiネットワークから切断されました" -AppLogo C:\PS\changenetwork.png

おまけ:サウンドで通知する

これで、PowerShellからユーザーへ通知を表示する方法がわかりました。ユーザーのPCにスピーカーがあれば、[console]::beep()を使って好きなメロディーを鳴らすこともできます。以下はその一例です。

[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(698,350)
[console]::beep(523,150)
[console]::beep(415,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(880,500)
[console]::beep(440,350)
[console]::beep(440,150)
[console]::beep(880,500)
[console]::beep(830,250)
[console]::beep(784,250)
[console]::beep(740,125)
[console]::beep(698,125)
[console]::beep(740,250)
[console]::beep(455,250)
[console]::beep(622,500)
[console]::beep(587,250)
[console]::beep(554,250)
[console]::beep(523,125)
[console]::beep(466,125)
[console]::beep(523,250)
[console]::beep(349,125)
[console]::beep(415,500)
[console]::beep(349,375)
[console]::beep(440,125)
[console]::beep(523,500)
[console]::beep(440,375)
[console]::beep(523,125)
[console]::beep(659,1000)
[console]::beep(880,500)
[console]::beep(440,350)
[console]::beep(440,150)
[console]::beep(880,500)
[console]::beep(830,250)
[console]::beep(784,250)
[console]::beep(740,125)
[console]::beep(698,125)
[console]::beep(740,250)
[console]::beep(455,250)
[console]::beep(622,500)
[console]::beep(587,250)
[console]::beep(554,250)
[console]::beep(523,125)
[console]::beep(466,125)
[console]::beep(523,250)
[console]::beep(349,250)
[console]::beep(415,500)
[console]::beep(349,375)
[console]::beep(523,125)
[console]::beep(440,500)
[console]::beep(349,375)
[console]::beep(261,125)
[console]::beep(440,1000)

用途に応じてWscriptのPopup、Windows Formsのバルーン通知、BurntToastモジュールを使い分けることで、PowerShellスクリプトのユーザビリティを大きく向上させることができます。

  1. 【PowerShell】Windows 10/8.1/8 にインストール済みのすべてのアプリとパッケージを一覧表示する方法

    Windows 10 のパソコンにインストールされているすべてのアプリやプログラムを PowerShell で確認したい方は、本記事の手順をご参考ください。Windows 10 および Windows 8(8.1)のモダンアプリは、すべてインストールパッケージを通じて導入されています。インストールパッケージとは、モダンアプリのインストールに必要なファイルがすべて含まれた固有のファイルのことです。特定のアプリを再インストールまたはアンインストールするには、そのアプリの名前(Name)、あるいはインストール時に使用されるパッケージの完全な名前(PackageFullName)を把握しておく必要があ

  2. コマンドプロンプトとPowerShellでアプリをインストールする方法|Chocolatey完全ガイド

    ソフトウェアのインストールは、手間がかかり、繰り返し作業になりやすく、ミスも起こりやすいプロセスです。アプリを使い始めるまでに、ダウンロード→インストーラーの起動→完了待ちという流れが必要で、多くの時間を消費します。コマンドプロンプトからのアプリインストール方法を覚えれば、この時間を大幅に節約できます。さらにPowerShellを使えば、複数のアプリを同時にインストールすることも可能です。 PowerShellとコマンドプロンプトは、Windows 10/11上のアプリケーションをスムーズにインストールできるツールです。ただし、それぞれインストール手順には若干の違いがあります。本ガイドでは、コ