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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1813265769
Url: https://administrator.de/contentid/1813265769
Ausgedruckt am: 25.11.2024 um 01:11 Uhr
4 Kommentare
Neuester Kommentar
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"
}