Dialoge in PowerShell

In diesem Artikel möchte ich einige Beispiel zeigen wie man Dialog aus dem .Net Framework in PowerShell nutzen kann.

Message Box

# Show message box popup.
Add-Type -AssemblyName System.Windows.Forms
$result = [System.Windows.Forms.MessageBox]::Show("My message", "Window Title", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::None)
 

Message Box with Custom Buttons

$caption = "Choose Action";
$message = "What do you want to do?";
$restart = new-Object System.Management.Automation.Host.ChoiceDescription "&Restart","Restart";
$shutdown = new-Object System.Management.Automation.Host.ChoiceDescription "&Shutdown","Shutdown";
$choices = [System.Management.Automation.Host.ChoiceDescription[]]($restart,$shutdown);
$answer = $host.ui.PromptForChoice($caption,$message,$choices,0)
switch ($answer){
    0 {"You entered restart"; break}
    1 {"You entered shutdown"; break}
}

Input Box

# Show input box popup.
Add-Type -AssemblyName Microsoft.VisualBasic
$inputText = [Microsoft.VisualBasic.Interaction]::InputBox("Enter some value:", "Window Title", "Default value")
 

Open File Dialog

# Show an Open File Dialog and return the file selected by the user.
function Read-OpenFileDialog([string]$InitialDirectory, [switch]$AllowMultiSelect)
{
Add-Type -AssemblyName System.Windows.Forms
$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.initialDirectory = $InitialDirectory
$openFileDialog.filter = "All files (*.*)| *.*"
if ($AllowMultiSelect) { $openFileDialog.MultiSelect = $true }
$openFileDialog.ShowDialog() > $null
if ($allowMultiSelect) { return $openFileDialog.Filenames } else { return $openFileDialog.Filename }
}
Read-OpenFileDialog C:\Temp -AllowMultiSelect

Folder Browse Dialog

# Show an Open Folder Dialog and return the directory selected by the user.
function Read-FolderBrowseDialog([string]$InitialDirectory)
{
Add-Type -AssemblyName System.Windows.Forms
$openFolderDialog = New-Object System.Windows.Forms.FolderBrowserDialog
$openFolderDialog.ShowNewFolderButton = $true
$openFolderDialog.RootFolder = $InitialDirectory
$openFolderDialog.ShowDialog()
return $openFolderDialog.SelectedPath
}
Read-FolderBrowseDialog Desktop

List Box Dialog

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'My Title'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please select a value:'
$form.Controls.Add($label)
$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 80
[void] $listBox.Items.Add('Value1')
[void] $listBox.Items.Add('Value2')
[void] $listBox.Items.Add('Value3')
[void] $listBox.Items.Add('Value4')
[void] $listBox.Items.Add('Value5')
[void] $listBox.Items.Add('Value6')
[void] $listBox.Items.Add('Value7')
$form.Controls.Add($listBox)
$form.Topmost = $true
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $listBox.SelectedItem
    $x
}

5 Kommentare

  1. Hi!
    Auf der Suche nach einer Lösung für anpassbare MsgButtons bin ich auf deinen Beitrag gekommen.
    Leider funktioniert deine Lösung (zumindest bei mir) nicht. Ich verwende PS 5 und die GUI bleibt beim Start aus einer .ps1 Datei aus, wie bei momentan allen Lösungsansätzen die versuchen eigene Buttons als Abfrage zu realisieren.

    • Funktioniert bei mir alles, gerade noch mal mit PowerShell 5.1 getestet, was evtl. aber das Problem sein könnte, wenn man die Codezeilen per Copy & Paste von der Webseite kopiert gehen die Zeilenumbrüche flöten, erst wenn man diese wieder hinzufügt geht es, kann das evtl. das Problem sein?

  2. Hallo
    Danke für den Beitrag, damit konnte ich eine Dialogbox erstellen, um AD-Accounts einfacher zu erstellen.
    Dabei bin ich jedoch auf ein Problem gestossen.
    Ich habe 2 Felder ‚Name‘ und ‚Vorname‘. In einem dritten Feld ‚ Display Name‘ sollte automatisch als Vorschlag die Werte von ‚Name‘ und ‚Vorname‘ zusammengeführt und abgefüllt werden.

    Bei MS Access gab es die Funktion AfterUpdate oder so ähnlich

    Hast du dazu eine Lösung?

  3. NickTheGreek

    Danke!!!

  4. Hallo

    kannst du mir vielleicht helfen?
    wie kann ich aus ein bestimmten Ordner eine Datei suchen und öffnen in Powershell
    und dies mit powershell gui verknüpfen sprich den Wert im Feld auslesen und die Datei öffnen mit den Wert?

    Gruß

    Carmen

Schreibe einen Kommentar zu Andreas Mariotti Abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert