Powershell Windows

【初心者向け】Powershellを使ったメッセージボックスの表示方法

Windows環境で簡易的なGUIアプリを作りたくなることがありますが、環境の制約で開発環境を入れられない時にPowershellでの作り方を知っていると便利だと思ったので、調べた結果をメモとして残しておきます。今回はフォームにテキストとボタンを配置する例を取り上げますが、テキストとボタンを追加する過程それぞれに解説をいれることで初心者でも簡単に分かるような構成にしています。

Poweshellでメッセージボックスを作る基本

Powershellでメッセージボックスを作る方法はいくつかありますが、恐らく使用頻度が多いのはWindows Formsでしょう。Windows FormsはメッセージボックスのようなGUIアプリケーションを開発するために利用されます。これを使ってメッセージボックスをどう作っていくのか、基本的な使い方をみていきましょう。

Windows Formsの基本的な実例

テキストやボタンなどを最終的には追加しますが、まずはフォームを作成しないことには始まりません。というわけで下地になるフォームを作ります。

Add-Type -AssemblyName System.Windows.Forms #1

$form = New-Object System.Windows.Forms.Form #2
$form.Text = "My Form" #3
$form.Size = New-Object System.Drawing.Size(300, 200) #4

$form.ShowDialog() #5
実行結果

#1
PowershellにおいてMicrosoftが提供している便利な機能を利用するためのおまじないみたいなものです。System.Windows.FormsをこのPowershellセッションで使用するためにこの記述が必要になります。

#2
Windows.Formsのオブジェクトを生成します。

#3
Windows.FormsのTextプロパティに文字を指定することでフォームのタイトルを変更しています。

#4
Windows.FormsのSizeプロパティにフォームのサイズを指定しています。

#5
英語のまんまですね、フォームを表示します。

Windows Formsを作成する際、上で挙げた例のようにTextやSizeプロパティなど、様々なプロパティに値を指定することでフォームの見た目や機能を変えることができます。Formsのプロパティは上で挙げた例含め以下のように多く用意されていますが、今回は基本的な例の解説なので詳細には触れません。気になる方は各自で調べてみてください。機会があれば別記事で取り上げようと思います。

プロパティ名内容
Textフォームの上部に表示されるタイトル
Sizeフォームのサイズ
BackColorフォームの背景色
Locationフォームの位置
Fontフォームで使用されるフォント
FormBorderStyleフォームの枠の設定
ControlBox最小化や最大化ボタンの表示有無

フォームにテキストやボタンを追加してみよう

では基本的なフォームの用意ができましたのでテキストやボタンを追加していきましょう。まずはテキストを表示するようにします。赤の部分が追加したPowershellスクリプトになります。

テキストボックスの追加

Add-Type -AssemblyName System.Windows.Forms

$form = New-Object System.Windows.Forms.Form
$form.Text = "Test Form"
$form.Size = New-Object System.Drawing.Size(300, 200)

$label = New-Object System.Windows.Forms.Label #1
$label.Text = "This is a test message."
$label.Font = New-Object System.Drawing.Font("Arial", 12) #2
$label.AutoSize = $true #3
$label.Location = New-Object System.Drawing.Point(10, 10) #4

$form.Controls.Add($label) #5

$form.ShowDialog()
テキストを追加した実行結果

#1
System.Windows.Forms.LabelはWindowsフォームでテキストを表示するために使用されるクラスです。

#2
フォントの種類とサイズを指定します。

#3
Labelのサイズを自動で調整する設定にします。実際に目で見えるわけではないのでわかりづらいですが、これをfalseにすると文字列が見切れたりします。以下はAutoSizeプロパティをfalseにした場合です。本来は「This is a test message.」が表示されるはずですがラベルのサイズが自動で拡大されないために途中で切れてしまっています。

#4
Locationプロパティを利用してラベルの表示位置を指定します。

#5
Controls.AddはWindowsフォーム上にControlオブジェクト(ラベルやボタン)を追加するためのメソッドです。Labelのテキストやフォントを指定したらこのメソッドを使ってWindowsフォームに追加してあげます。

またラベルにもここで紹介したものの他に多くのプロパティを設定することができ、背景色や境界線のスタイルなどを指定できます。こちらも気になる方は調べてみてください。

ボタンの追加

では続いてボタンを追加していきます。

Add-Type -AssemblyName System.Windows.Forms

$form = New-Object System.Windows.Forms.Form
$form.Text = "Test Form"
$form.Size = New-Object System.Drawing.Size(300, 200)

$label = New-Object System.Windows.Forms.Label
$label.Text = "This is a test message."
$label.Font = New-Object System.Drawing.Font("Arial", 12)
$label.AutoSize = $false
$label.Location = New-Object System.Drawing.Point(10, 10)


$okButton = New-Object System.Windows.Forms.Button
$okButton.Text = "OK"
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK #1
$okButton.Location = New-Object System.Drawing.Point(10, 40)

$form.Controls.Add($label)
$form.Controls.Add($okButton)

$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK) { #2
    Write-Host "OK Button Clicked!" 
}
ボタンを追加した実行結果

#1
ButtonのDialogResultをプロパティを指定することでボタンをクリックしたときの戻り値を指定することができます。[System.Windows.Forms.DialogResult]::OKという書き方がわかりづらいかもしれませんが、これはSystem.Windows.Forms.DialogResultクラスのOKというメンバーにアクセスするという意味です。Powershellでは[クラス名]::プロパティ、[クラス名]::メソッド名という書き方をすることでプロパティやメソッドにアクセスすることができます。

$pi = [System.Math]::PI
Write-Host "PI: $pi"
# PI: 3.14159265358979


#2
if文で「OK」ボタンが想定通り押されたかを調べています。#1により想定通り「OK」ボタンが押された際は$result変数に「OK」という文字列が格納されることになるため、if文の条件はtrueになります。

-Powershell, Windows