「PowerShellは黒い画面でコマンドを叩くためだけのツールだと思っていませんか?」

実は、それは Windows標準機能だけでGUI画面や入力フォームを作成できる強力なUI開発ツールです。

なぜなら、PowerShellから `.NET Framework` の `System.Windows.Forms` を直接呼び出せるため、追加ソフトなしでボタン・テキストボックス・ラベルなどのUI部品をスクリプトだけで画面に配置できるからです。

新しいアプリをインストールできない社内ルールが厳しい環境でも、PowerShellなら追加ソフトなしで入力フォームや簡単なUIツールが作れます。この記事では、PowerShellの `.NET Framework` 連携機能を使って、ゼロからGUIの画面表示・フォーム作成・デザインカスタマイズまでをステップバイステップで解説します。

目次

PowerShellでGUI画面を表示できる仕組み

PowerShellは `.NET Framework` にアクセスできるため、`System.Windows.Forms` 名前空間を利用してWindowsフォーム(WinForms)アプリケーションを作成できます。専用のGUI Designerツールを使わなくても、スクリプトだけでUIを構築できるのがPowerShellの強みです。

通常のGUIアプリ開発にはVisual StudioやC#が必要なイメージがありますが、PowerShellスクリプトだけでも以下のような要素を画面に配置できます。

  • ボタン(Button)
  • テキストボックス(TextBox)
  • ラベル(Label)
  • チェックボックス、ドロップダウンリスト など

この方法は Windows PowerShell(5.1以下) で動作します。PowerShell 7(Core)では `System.Windows.Forms` がデフォルトで使えない場合があるため、Windows PowerShell ISEを使って実行してください。

ステップ1:Windowsフォームを作成して画面表示する

まずは空のウィンドウを表示してみましょう。Windows PowerShell ISE を起動して、以下のコードを入力し `F5` キーで実行します。

Windows PowerShell ISEは、Windowsのスタートメニュー → 「Windows PowerShell」フォルダ内にあります。検索バーに「ISE」と入力しても見つかります。

# アセンブリの読み込み
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

# フォームの設定
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "PowerShellでGUI表示する"
$Form.Size = New-Object System.Drawing.Size(600, 400)

# フォームの表示
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()

実行すると、タイトルバーに「PowerShellでGUI表示する」と表示された空のウィンドウが現れます。

コードの解説

説明
LoadWithPartialName.NET Frameworkの描画(`System.Drawing`)とフォーム(`System.Windows.Forms`)のアセンブリを読み込みます
New-Object System.Windows.Forms.Form新しいフォーム(ウィンドウ)オブジェクトを生成します
$Form.Textウィンドウのタイトルバーに表示される文字列を設定します
$Form.Sizeウィンドウの横幅と高さをピクセル単位で指定します
$Form.ShowDialog()フォームをモーダルダイアログとして表示します

ステップ2:ボタンと入力フォーム(テキストボックス)を追加する

空のフォームだけでは使い道がないので、ボタン入力フォーム(テキストボックス)を追加してみましょう。PowerShellのGUIでは、テキストボックスがユーザーからの入力を受け取る主要なコントロールになります。

先ほどのコードの「フォームの設定」と「フォームの表示」の間に、以下のコードを挿入してください。

# ボタンの設定
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(100, 50)
$Button.Size = New-Object System.Drawing.Size(200, 100)
$Button.Text = "ボタン"
$Form.Controls.Add($Button)

# テキストボックスの設定
$TextBox = New-Object System.Windows.Forms.TextBox
$TextBox.Location = New-Object System.Drawing.Point(100, 200)
$TextBox.Size = New-Object System.Drawing.Size(400, 100)
$TextBox.Text = "サンプル"
$TextBox.Multiline = $True
$Form.Controls.Add($TextBox)

`F5` で実行すると、ウィンドウ内にボタンとテキストボックスが表示されます。

主要プロパティの意味

プロパティ説明
Locationフォーム内の表示位置(左上からのX, Y座標)
Sizeコントロールの幅と高さ(ピクセル)
Textボタンに表示される文字列、またはテキストボックスの初期値
Multilineテキストボックスで複数行入力を許可するかどうか(`$True` / `$False`)

コントロールを作成しただけでは画面に表示されません。必ず `$Form.Controls.Add()` でフォームに追加する必要があります。これを忘れるとコントロールが画面に出ないので注意してください。

ステップ3:ボタンにクリックイベントを設定する

ボタンが表示されても、押しても何も起きないのでは意味がありません。ここでは、ボタンを押すとテキストボックスに現在の日付が表示される機能を追加してみましょう。

イベント処理の関数を定義する

以下の関数をスクリプトに追加してください。

function Btn_Click {
    $TextBox.Text = Get-Date
}

この関数は、`Get-Date` コマンドレットで取得した現在の日時をテキストボックスに設定します。

ボタンにイベントを紐づける

次に、ボタンのクリックイベントにこの関数を紐づけます。以下のコードを「ボタンの設定」と「フォームの表示」の間に追加してください。

$Button.Add_Click({Btn_Click})

`F5` で実行し、ボタンをクリックしてみましょう。テキストボックスの内容が現在の日時に書き換わります。

ステップ4:フォームのデザインをカスタマイズする

PowerShellのGUIフォームは、見た目のデザインもスクリプトからカスタマイズできます。フォームの背景色やフォント、コントロールの色を変更して、より使いやすいUIにしましょう。

# フォームのデザインカスタマイズ
$Form.BackColor = [System.Drawing.Color]::FromArgb(240, 240, 245)
$Form.Font = New-Object System.Drawing.Font("メイリオ", 10)
$Form.FormBorderStyle = "FixedDialog"
$Form.MaximizeBox = $False
$Form.StartPosition = "CenterScreen"

# ボタンのデザイン
$Button.BackColor = [System.Drawing.Color]::FromArgb(0, 120, 215)
$Button.ForeColor = [System.Drawing.Color]::White
$Button.FlatStyle = "Flat"

よく使うデザイン関連プロパティ

プロパティ説明
BackColor背景色をRGBで指定
ForeColor文字色を指定
Fontフォント名とサイズを指定
FormBorderStyleウィンドウの枠線スタイル(`Sizable` / `FixedDialog` / `None` など)
StartPositionフォームの初期表示位置(`CenterScreen` で画面中央)
FlatStyleボタンの見た目(`Flat` でフラットデザイン)

フォームデザインの変更はコントロールを `Controls.Add()` する前に記述するのがおすすめです。後から変更しても反映されますが、コードの見通しが良くなります。

完成コード(コピペ用)

ここまでの内容をまとめた、すぐに動かせる完成版コードです。フォームのデザインカスタマイズも含んでいます。

# アセンブリの読み込み
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

# フォームの設定
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "PowerShell GUI サンプル"
$Form.Size = New-Object System.Drawing.Size(600, 400)
$Form.BackColor = [System.Drawing.Color]::FromArgb(240, 240, 245)
$Form.Font = New-Object System.Drawing.Font("メイリオ", 10)
$Form.FormBorderStyle = "FixedDialog"
$Form.MaximizeBox = $False
$Form.StartPosition = "CenterScreen"

# ボタンの設定
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(100, 50)
$Button.Size = New-Object System.Drawing.Size(200, 100)
$Button.Text = "日付を表示"
$Button.BackColor = [System.Drawing.Color]::FromArgb(0, 120, 215)
$Button.ForeColor = [System.Drawing.Color]::White
$Button.FlatStyle = "Flat"
$Form.Controls.Add($Button)

# テキストボックス(入力フォーム)の設定
$TextBox = New-Object System.Windows.Forms.TextBox
$TextBox.Location = New-Object System.Drawing.Point(100, 200)
$TextBox.Size = New-Object System.Drawing.Size(400, 100)
$TextBox.Text = "ここに結果が表示されます"
$TextBox.Multiline = $True
$Form.Controls.Add($TextBox)

# ボタンのクリックイベント
function Btn_Click {
    $TextBox.Text = Get-Date
}
$Button.Add_Click({Btn_Click})

# フォームの画面表示
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()

このコードをベースにして、ファイル選択ダイアログやリストボックスなどを追加すれば、日常業務で使える簡易ツールに発展させることもできます。

PowerShell GUIの活用シーン

PowerShellで作成したGUI・入力フォームは本格的なアプリ開発には向きませんが、以下のような場面で便利です。

活用シーン具体例
運用作業の自動化サーバー情報を取得してテキストボックスに表示するツール
ファイル操作ドラッグ&ドロップで対象ファイルを選択し、一括リネームするツール
ユーザー入力の受け取りスクリプト実行時にパラメータをGUIで入力してもらう
簡易レポートActive Directory情報やディスク使用量を一覧表示する画面

特にアプリのインストールが制限された企業環境では、PowerShellだけで作れるGUIツールは重宝します。追加ソフト不要なので、情報システム部門の承認なしで使えるケースが多いです。

まとめ

PowerShellと `.NET Framework` の `System.Windows.Forms` を組み合わせることで、Windows標準環境だけでGUIの画面表示・入力フォーム作成が実現できます。

  • ✅ `System.Windows.Forms` のアセンブリを読み込んでフォームを作成・画面表示
  • ✅ `Button` や `TextBox` などのコントロールで入力フォームを構築
  • ✅ `Add_Click()` でボタンにイベント処理を紐づけ
  • ✅ 背景色・フォント・FlatStyleなどでフォームデザインをカスタマイズ
  • ✅ GUI Designerツール不要、追加ソフトなしで社内環境でも安心

ちょっとしたUIツールや入力フォームを作成するとき、画面があるだけでぐっと使いやすくなります。ぜひ一度お試しください。

PowerShellやWindows運用の自動化でお困りごとがあれば、お気軽にご相談ください。