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
}
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?
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?
Danke!!!
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