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
It is possible (albeit somewhat painful) to construct GUIs in PowerShell and have them interact with your script logic.