バッチファイルやPowerShellスクリプトでメッセージウィンドウを表示する方法

バッチファイルやPowerShellスクリプトでメッセージウィンドウを表示する方法

WindowsでバッチファイルやPowerShellスクリプトを作成していると、ユーザーにメッセージを表示して、選択肢から選択してほしいときがあります。

そのようなとき、コマンドプロンプトやPowerShellの画面にテキストでメニューなどを表示する方法もありますが、以下のようなメッセージウィンドウを表示してユーザーにクリック操作で選択してもらうという方法もあります。

バッチファイルやPowerShellスクリプトでメッセージウィンドウを表示する方法

そこでここでは、バッチファイルやPowerShellスクリプトで上のようなメッセージウインドウを表示して、ユーザーがクリックした「はい/いいえ」「Yes/No/Cancel」などのボタンに応じた処理を実行する方法を解説します。

メッセージウィンドウを表示する

バッチファイルやPowerShellスクリプトでメッセージウィンドウを表示するには、PowerShellから.NETライブラリを読み込む必要があるので、まず、PowerShellで以下のコマンドを実行します。

PS> Add-Type -AssemblyName System.Windows.Forms

.NETライブラリを読み込んだら、以下のようにコマンドを実行することでメッセージウィンドウを表示できます。

PS> [System.Windows.Forms.MessageBox]::Show("これはサンプルです。", 'サンプル', 'YesNoCancel', 'Question')

「[System.Windows.Forms.MessageBox]::Show」では、第1引数でメッセージウィンドウに表示する文章、第2引数でメッセージウィンドウのタイトル、第3引数でボタンのタイプ、第4引数でアイコンのタイプを指定し、引数が設定されていない場合はデフォルト値で実行されます。

第1引数に表示する文章を途中で改行したいときは、改行したい位置に「`n」を記述します。

バッチファイルやPowerShellスクリプトでメッセージウィンドウを表示する方法

第3引数に指定できるボタンのタイプは、次のとおりです。

表示されるボタン
AbortRetryIgnore中止/再試行/無視
OKOK
OKCancelOK/キャンセル
RetryCancel再試行/キャンセル
YesNoはい/いいえ
YesNoCancelはい/いいえ/キャンセル

第4引数に指定できるアイコンのタイプは、次のとおりです。

表示されるアイコン
Information青い〇に「i」
Error赤い〇に「×」
Warning黄色い△に「!」 
Question青い〇に「?」 
Noneアイコン表示なし

なお、メッセージウィンドウで押されたボタンに応じた戻り値が返されるので、変数に格納するなどして判定できます。

PS> $resutl = [System.Windows.Forms.MessageBox]::Show("こんなウィンドウが表示できます。", 'サンプル', 'YesNoCancel', 'Question')
PS> echo $resutl
Yes

ボタンごとの戻り値は次のとおりです。なお、デフォルトでは「OK」や「Cancel」といった単語で返されます。

ボタンの名前戻り値数値
OKOK1
キャンセルCancel2
中止Abort3
再試行Retry4
無視Ignore5
はいYes6
いいえNo7

「$result.value__」とすれば、数値で判定することもできます。たとえば「はい」ボタンをが押されたときは「6」が返ってきます。

PS> $resutl = [System.Windows.Forms.MessageBox]::Show("こんなウィンドウが表示できます。", 'サンプル', 'YesNoCancel', 'Question')
PS> echo $resutl.value__
6

あとは、IF文やSWITCH文を使って「$result」に格納された値に応じた処理を行うことができます。

バッチファイルの場合

コマンドプロンプトやバッチファイルでメッセージウィンドウを表示したいときは、上で紹介したPowerShell上で実行するコマンドを、コマンドプロンプトやバッチファイルからpowershellコマンドの引数として実行することで実現可能です。

> powershell -Command "Add-Type -AssemblyName System.Windows.Forms;$result = [System.Windows.Forms.MessageBox]::Show(\"こんなウィンドウが表示できます。\", 'サンプル', 'YesNoCancel', 'Question');exit $result"
> echo %errorlevel%
6

なお、上のコマンドを実行するとリターンコードとしてボタンに応じた数値が返ってきます。たとえば「はい」ボタンがクリックされた場合は「6」が返されます。

あとがき

コマンド操作に詳しくない方にバッチファイルやPowerShellスクリプトを実行してもらう時などは、条件分岐の際に「OK/Cancel」や「はい/いいえ」などのボタンで選択してもらう方が分かりやすいケースがあり、そのようなときにここで紹介したメッセージウィンドウが役立つでしょう。