Powershell Listbox
Hallo zussammen,
ist es möglich weitere Powershell Skripte über die folgende Listbox auszuführen und wenn ja hat jemand einen Tipp für mich wie?
Beispielsweise für atl-dc-001
Grüße
Jannik
ist es möglich weitere Powershell Skripte über die folgende Listbox auszuführen und wenn ja hat jemand einen Tipp für mich wie?
Beispielsweise für atl-dc-001
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Select a Computer'
$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 computer:'
$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('atl-dc-001')
[void] $listBox.Items.Add('atl-dc-002')
[void] $listBox.Items.Add('atl-dc-003')
[void] $listBox.Items.Add('atl-dc-004')
[void] $listBox.Items.Add('atl-dc-005')
[void] $listBox.Items.Add('atl-dc-006')
[void] $listBox.Items.Add('atl-dc-007')
$form.Controls.Add($listBox)
$form.Topmost = $true
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$x = $listBox.SelectedItem
$x
}
Grüße
Jannik
Please also mark the comments that contributed to the solution of the article
Content-ID: 1813265769
Url: https://administrator.de/contentid/1813265769
Printed on: October 9, 2024 at 17:10 o'clock
4 Comments
Latest comment
Servus Jannik.
ginge z.B. auch per Doppelklick-Event der Listbox
Oder eben am Ende mit
mit der Übergabe des Namen mittels Parameter an ein anderes Skript. Du kannst natürlich auch mit dem Namen aus der Listbox den Namen eines Skripts bilden, aber das kannst du ja handhaben wie du möchtest, wir kennen ja deinen gewünschten Workflow nicht.
Grüße Uwe
ginge z.B. auch per Doppelklick-Event der Listbox
# .....
$listbox.add_DoubleClick({
if ($listbox.SelectedIndex -ne -1){
[System.Windows.Forms.MessageBox]::Show("Starting skript for computer '$($listbox.SelectedItem)'.")
# change script path and uncomment following line
# &"C:\another_script.ps1"
}
})
# .....
&"C:\another_script.ps1" -meinParameter $listBox.SelectedItem
Grüße Uwe
Zitat von @Jannik2018:
Besten dank schonmal allerdings möchte ich Pro Listbox Item ein Skript ausführen wenn ich das entsprechend dort plaziere funktioniert es aber nicht wie muss es dann aussehen?
Auch kein Problem da bietet sich bswp. eine Hashtable für die Zuordnung an. Du kannst diese Zuordnung natürlich bei Bedarf auch aus einer externen Datei lesen falls benötigt.Besten dank schonmal allerdings möchte ich Pro Listbox Item ein Skript ausführen wenn ich das entsprechend dort plaziere funktioniert es aber nicht wie muss es dann aussehen?
# Forms-Assembly laden
Add-Type -AssemblyName System.Windows.Forms
# Hashtable mit Listbox <> Skriptzuordnung
$scripts = [ordered]@{
'atl-dc-001' = 'D:\test\script1.ps1'
'atl-dc-002' = 'D:\test\script2.ps1'
'atl-dc-003' = 'D:\test\script3.ps1'
'atl-dc-004' = 'D:\test\script4.ps1'
'atl-dc-005' = 'D:\test\script5.ps1'
'atl-dc-006' = 'D:\test\script6.ps1'
}
# Controls erstellen ===========================
$form = New-Object System.Windows.Forms.Form -P @{
Text = 'Select a Computer'
Size ='300,200'
StartPosition = 'CenterScreen'
Topmost = $true
}
$okButton = New-Object System.Windows.Forms.Button -P @{
Location = '75,120'
Size = '75,23'
DialogResult = [System.Windows.Forms.DialogResult]::OK
Enabled = $false
Text = 'OK'
}
$cancelButton = New-Object System.Windows.Forms.Button -P @{
Location = '150,120'
Size = '75,23'
DialogResult = [System.Windows.Forms.DialogResult]::Cancel
Text = 'Cancel'
}
$label = New-Object System.Windows.Forms.Label -P @{
Location = '10,20'
Size = '280,20'
Text = 'Please select a computer:'
}
$listBox = New-Object System.Windows.Forms.ListBox -P @{
Location = '10,40'
Size = '260,80'
add_SelectedIndexChanged = {
$okButton.Enabled = $listbox.SelectedIndex -ne -1
}
add_DoubleClick = {
if ($listbox.SelectedIndex -ne -1){
$form.DialogResult = 'OK'
$form.Close()
}
}
}
# ====================
# Listbox Items aus der Hashtable hinzufügen
[void]$listBox.Items.AddRange($scripts.Keys)
# Accept und cancel Buttons zuweisen
$form.AcceptButton = $okButton
$form.CancelButton = $cancelButton
# Alle Controls der form hinzufügen
$form.Controls.AddRange(@($okButton,$cancelButton,$label,$listbox))
# Form anzeigen
$result = $form.ShowDialog()
# Ergebnis der Form ermitteln
if ($result -eq 'OK'){
# Skriptpfad aus Hashtable anhand sektiertem Eintrag der Listbox ermitteln
$script = $scripts[$listBox.SelectedItem]
# prüfe ob Skriptpfad tatsächlich exisitiert
if (Test-Path $script){
# Führe das Skript aus
write-host "Starte Skript '$script' ... " -F Green
&$script
}else{
Write-Warning "Script-Pfad '$script' nicht gefunden !"
}
Read-Host "Skript beendet, Enter drücken zum beenden"
}