home > notes > powershell > Simple GUI [ printer-friendly version ]
Basics
Profile
Simple GUI
ShowUI

PowerShell Simple GUI

GOAL: Execute a simple GUI PowerShell script that lets you select an item from a list.

PowerShell doesn't just do scripting in the classic sense; since it can access Windows GUI elements, you can incorporate GUIs in your code. Here's an example (download):

# present a list, report back which item was selected

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 

$Form = New-Object System.Windows.Forms.Form 
$Form.Text = "Select a Flavor"
$Form.Size = New-Object System.Drawing.Size(300,200) 
$Form.StartPosition = "CenterScreen"

$Form.KeyPreview = $True
$Form.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
    {$x=$ListBox.SelectedItem;$Form.Close()}})
$Form.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
    {$Form.Close()}})

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$x=$ListBox.SelectedItem;$Form.Close()})
$Form.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$Form.Close()})
$Form.Controls.Add($CancelButton)

$Label = New-Object System.Windows.Forms.Label
$Label.Location = New-Object System.Drawing.Size(10,20) 
$Label.Size = New-Object System.Drawing.Size(280,20) 
$Label.Text = "Please select a flavor:"
$Form.Controls.Add($objLabel) 

$ListBox = New-Object System.Windows.Forms.ListBox 
$ListBox.Location = New-Object System.Drawing.Size(10,40) 
$ListBox.Size = New-Object System.Drawing.Size(260,20) 
$ListBox.Height = 80

[void] $ListBox.Items.Add("Vanilla")
[void] $ListBox.Items.Add("Chocolate")
[void] $ListBox.Items.Add("Strawberry")
[void] $ListBox.Items.Add("Peppermint")
[void] $ListBox.Items.Add("Rocky Road")
[void] $ListBox.Items.Add("Butterscotch")
[void] $ListBox.Items.Add("Pistachio")

$Form.Controls.Add($ListBox) 

$Form.Topmost = $True

$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()

$x

Summary

It is possible (albeit somewhat painful) to construct GUIs in PowerShell and have them interact with your script logic.


home The most dangerous thing on the battlefield is an officer with a map. privacy