「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)
- チェックボックス、ドロップダウンリスト など
ステップ1:Windowsフォームを作成して画面表示する
まずは空のウィンドウを表示してみましょう。Windows PowerShell ISE を起動して、以下のコードを入力し `F5` キーで実行します。

# アセンブリの読み込み
[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`) |
ステップ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` でフラットデザイン) |
完成コード(コピペ用)
ここまでの内容をまとめた、すぐに動かせる完成版コードです。フォームのデザインカスタマイズも含んでいます。
# アセンブリの読み込み
[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と `.NET Framework` の `System.Windows.Forms` を組み合わせることで、Windows標準環境だけでGUIの画面表示・入力フォーム作成が実現できます。
- ✅ `System.Windows.Forms` のアセンブリを読み込んでフォームを作成・画面表示
- ✅ `Button` や `TextBox` などのコントロールで入力フォームを構築
- ✅ `Add_Click()` でボタンにイベント処理を紐づけ
- ✅ 背景色・フォント・FlatStyleなどでフォームデザインをカスタマイズ
- ✅ GUI Designerツール不要、追加ソフトなしで社内環境でも安心
ちょっとしたUIツールや入力フォームを作成するとき、画面があるだけでぐっと使いやすくなります。ぜひ一度お試しください。
PowerShellやWindows運用の自動化でお困りごとがあれば、お気軽にご相談ください。