ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【PowerShell】PowerShellでメッセージボックスを表示させる

 たまにPowerShellでちょっとした処理を実行したい場合があります。
 その際にコンソールではなくメッセージボックスでメッセージを表示させたり、確認メッセージを表示してYes, Noを選択させたい場合があります。

 今回はPowerShellでそんなメッセージボックスを表示させる方法になります。

 2つの方法を紹介しますが、詳しくは参考資料に挙げているページ様の方を参照してください。


 では、始めます。


1:.NETのMessageBoxを使う方法
 1つ目の方法は.NETの機能を使うことです。

 具体的には以下のようにします。

 以下の内容をコピペしてSJIS形式で保存してください。
 PowerShellSJISで動くため、UTF-8などの形式だと文字化けしたり動かない場合があるので注意してください。

・test1.ps1

# アセンブリの読み込み(必須)
Add-Type -Assembly System.Windows.Forms

# メッセージボックスを表示する関数
function Show-Message([string]$msg, [string]$title, [string]$type="OK", [string]$icon="None") {
  $showMessageRes = [System.Windows.Forms.MessageBox]::Show($msg, $title, [System.Windows.Forms.MessageBoxButtons]::$type, [System.Windows.Forms.MessageBoxIcon]::$icon)
  return $showMessageRes
}

# メッセージボックス表示
$res = Show-Message "YesかNoかを選択してください。" "選択" "YesNo" "Warning"
Show-Message "${res}を選択しました。" "確認" "OK" "Information"
Show-Message "エラー発生。" "エラー" "OK" "Error"
Show-Message "デフォルト表示"

 少し解説すると最初のアセンブリ読み込みをした後、メッセージボックスを表示させる関数を定義しています。
 第1引数にメッセージ内容、第2引数にタイトル、第3引数にボタンのタイプ、第4引数にアイコンのタイプを指定します。設定されていない場合はデフォルト値で実行されます。
 戻り値も取得できるようにしているため、選択肢がある場合はその結果で処理を分けることもできるようにしています。
 ボタンやアイコンに設定できる値については、以下を参照してください。


 PowerShellを記述したファイルを実行するには、ファイルを右クリックして出てきた中から「PowerShellで実行」を選択して実行します。

 実際に実行すると以下のように順番にメッセージボックスが表示されます。





2:その他の方法
 1の方法は自由度は高いですが、関数にまとめないと少し面倒な書き方が必要でした。

 少し自由度は落ちますが、より簡単な書き方もできます。

 以下の内容をコピペして、こちらもSJIS形式で保存してください。

・test2.ps1

# オブジェクト作成
$msgbox = new-object -comobject wscript.shell

# メッセージボックス表示
$res = $msgbox.popup("YesかNoかを選択してください。", 0, "選択", 4)
$msgbox.popup("${res}を選択しました。", 0, "確認", 0)
$msgbox.popup("エラー発生。", 0, "エラー", 16)
$msgbox.popup("デフォルト表示")

 こちらの方はシンプルですが、引数に設定する値が固定されています。
 第1引数はメッセージ内容、第2引数は表示秒数(省略時は0)、第3引数はタイトル、そして第4引数はメッセージボックスのタイプを以下の表の番号から指定します(参考ページ様から引用して加工)。

番号 内容
0 [OK] ボタンのみ表示。
1 [OK] ボタンと [キャンセル] ボタンを表示。
2 [中止] ボタン、[再試行] ボタン、 [無視] ボタンを表示。
3 [はい] ボタン、[いいえ] ボタン、[キャンセル] ボタンを表示。
4 [はい] ボタンと [いいえ] ボタンを表示。
5 [再試行] ボタンと [キャンセル] ボタンを表示。
16 [Stop] アイコンで[OK]ボタンを表示。
32 [?] アイコンで[OK]ボタンを表示。
48 [!] アイコンで[OK]ボタンを表示。
64 [i] アイコンで[OK]ボタンを表示。

 保存できたら先ほどと同様に右クリックから「PowerShellで実行」を選択して実行します。

 実行すると以下のように順番にメッセージボックスが表示されます。





 以上がPowerShellでメッセージボックスを表示させる方法になります。

 ちょっとした処理でもメッセージボックスを表示させるようにすれば、使いやすくなるかと思います。


・参考資料