この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft LearnのWPF/XAML資料と既存Daily-Code-Samplesを確認し、見た目を作り込む前にClickイベントがPowerShellへ届く最小GUIとして整理しています。
検証ステータス:📘 公式情報確認済み・Windows実機未確認
PowerShellでもWPF/XAMLを使ってGUIを作れます。ただし最初から業務アプリを作るより、TextBox 1個とButton 1個で「XAMLのボタンを押す → PowerShellのイベントハンドラが動く」を確認する方が仕組みを理解しやすくなります。
今回の成功条件
次の4つが起きればSmoke Test成功です。
ウィンドウが開く
TextBoxへ文字を入力できる
Buttonを押せる
画面とコンソールへ
[SUCCESS]/[RESULT]が出る
WPFとXAMLの役割はMicrosoft Learnで確認できます。
まず動かす
Windows PowerShell 5.1をSTAで起動して試します。
Add-Type -AssemblyName PresentationFramework
[xml]$xaml = @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="papanda Smoke Test" Width="380" Height="180">
<StackPanel Margin="20">
<TextBox Name="InputText" Margin="0,0,0,10" />
<Button Name="RunButton" Content="イベントを送る" />
<TextBlock Name="ResultText" Margin="0,12,0,0" />
</StackPanel>
</Window>
'@
$reader = [System.Xml.XmlNodeReader]::new($xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)
$input = $window.FindName('InputText')
$button = $window.FindName('RunButton')
$result = $window.FindName('ResultText')
$button.Add_Click({
$result.Text = "[SUCCESS] PowerShellで受信: $($input.Text)"
Write-Host "[RESULT] Text = $($input.Text)"
})
[void]$window.ShowDialog()
実行時は次のようにSTAを明示するのが分かりやすいです。
powershell.exe -STA
ここを見る
画面を作るのはXAML、Click後の処理を書くのはPowerShellです。FindName() がXAML内の名前付き要素をPowerShell側へ橋渡しし、Add_Click() がButtonのClickイベントへ処理を登録します。
sequenceDiagram
participant U as User
participant X as XAML Button
participant W as WPF event loop
participant P as PowerShell handler
U->>X: Click
X->>W: Click event
W->>P: Add_Click handler
P-->>X: ResultTextを更新
GUIが表示されただけでは成功判定にしません。ボタンを押した結果がPowerShell側へ届いて初めて、イベント配線まで確認できたと判断します。
1か所変えてみる
Button の Content="イベントを送る" だけを別の文字へ変えて再実行します。処理は変わらず、XAMLが画面構造・表示を担当していることを確認できます。
次はTextBlockを1つ増やす、Gridへ変える、色を付ける、と段階的に育てれば、どの変更で問題が起きたか切り分けやすくなります。
なぜSTAが出てくるのか
WPFにはUIスレッドとDispatcherの考え方があります。PowerShellからWPFを扱うときは、スレッドのApartmentStateが関係します。完成版サンプルではSTAでない場合を明示的に失敗扱いにしています。
仕事で使うなら
GUI化する前に、処理本体を関数として単独実行できる状態にしておくと安全です。
GUIの見た目と処理ロジックを分ける
空入力を黙って採用しない
長時間処理をUIスレッドで直接回さない
例外を握りつぶして成功表示しない
ボタン連打や二重実行を考慮する
最初のSmoke Testが動いてから装飾を足す方が、初心者でも原因を追いやすくなります。
GitHubサンプル
完全版はSTA確認、空入力、[FAILED] 表示まで含みます。
公式情報・一次情報
まとめ
PowerShell + XAMLの最初の目標は豪華な画面ではなく、UIイベントがPowerShellへ届くことを目で確認することです。最小GUIが動いた後なら、機能や見た目を1つずつ安全に積み上げられます。
