Powershell: Output Skript nach Textbox
Guten Morgen Zusammen,
ich habe eine Powershell Gui gebaut, mit mehreren Comboboxen (im Code unten jetzt nur eine) und einer Textbox. In diesen Comboboxen gibt es mehrere Skripte zur Auswahl. Die Skripte liegen als separate .ps1 Skripte auf einem Server.
Wählt man jetzt ein Skript aus und klickt auf Ausführen startet das Skript in einem separaten Fenster...ist ja normal.
Jetzt habe ich ein 2 Fragen.
Vielen Dank im Voraus.
ich habe eine Powershell Gui gebaut, mit mehreren Comboboxen (im Code unten jetzt nur eine) und einer Textbox. In diesen Comboboxen gibt es mehrere Skripte zur Auswahl. Die Skripte liegen als separate .ps1 Skripte auf einem Server.
Wählt man jetzt ein Skript aus und klickt auf Ausführen startet das Skript in einem separaten Fenster...ist ja normal.
Jetzt habe ich ein 2 Fragen.
- Wie müsste ich meine GUI jetzt anpassen, damit das ausgewählte Skript nicht in einem separaten Fenster läuft sondern in der Textbox?
- Einige Skripte erwarten eine Eingabe vom User bspw. IP Adresse etc. Ist das mit Eingabe in der Textbox möglich?
Vielen Dank im Voraus.
$objForm = New-Object System.Windows.Forms.Form
$objForm.Size = New-Object System.Drawing.Size(950,680)
$objForm.BackColor = "Black"
$objForm.StartPosition = "CenterScreen"
$objForm.FormBorderStyle = 'Fixed3D'
$objForm.MaximizeBox = $false
$objForm.KeyPreview = $True
$objForm.Topmost = $false
$objTextbox = New-Object System.Windows.Forms.TextBox
$objTextbox.Location = New-Object System.Drawing.Size(350,10)
$objTextbox.Size = New-Object System.Drawing.Size(550,400)
$objTextbox.Multiline = $true
$objTextbox.TabIndex = 1
$objForm.Controls.Add($objTextbox)
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(10,370)
$OKButton.Size = New-Object System.Drawing.Size(50,23)
$OKButton.Text = "AUSFÜHREN"
$OKbutton.Cursor = [System.Windows.Forms.Cursors]::Hand
$OKbutton.Font = "Arial,8,style=bold"
$OKbutton.AutoSize = $true
$OKbutton.ForeColor = "White"
$OKbutton.backColor = "Green"
$OKbutton.Width = 320
$OKbutton.Height = 40
$OKButton.Add_Click({
$selected = $objCombobox.SelectedItem
$script:x += $objCombobox.SelectedItem
if (![string]::IsNullOrWhiteSpace($selected)) {
#$objLabel.Text = "Performing action $($selected)"
switch ($selected) {
"Skript 1" {start-process "\\server1\folder1\skript1.ps1"}
"Skript 2" {start-process "\\server1\folder2\skript2.ps1"}
}
$objLabel.Text = "INSTALLATIONEN"
$objCombobox.SelectedIndex = -1
}
})
$objForm.Controls.Add($OKButton)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,120)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = "INSTALLATIONEN"
$objLabel.Forecolor = "White"
$objLabel.Backcolor = "Transparent"
$objLabel.Font = "Arial,8,style=bold"
$objForm.Controls.Add($objLabel)
$objCombobox = New-Object System.Windows.Forms.Combobox
$objCombobox.Text = "Bitte auswählen...."
$objCombobox.Location = New-Object System.Drawing.Size(10,140)
$objCombobox.Size = New-Object System.Drawing.Size(320,20)
$objCombobox.Height = 500
[void] $objCombobox.Items.Add("Skript 1")
[void] $objCombobox.Items.Add("Skript 2")
$objForm.Controls.Add($objCombobox)
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1464489959
Url: https://administrator.de/contentid/1464489959
Ausgedruckt am: 08.11.2024 um 21:11 Uhr
7 Kommentare
Neuester Kommentar
$result = Start-Job -FilePath "C:\test.ps1" -ArgumentList 'Blablub' | Receive-Job -Wait | out-string
$result
C:\test.ps1
write-host "Parameter übergeben: $($args)"
1..10 | %{
write-host "Test $_"
sleep -Milliseconds 200
}
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Dann lies mal die Links (in Ruhe) dann kommst du dahinter.
Anscheinend nicht so ganz denn sonst hätte es längst geschnackelt ...
Fertig. Sehe das Problem ehrlich gesagt nicht.
Wie du Parameter an ein Skript übergibst siehst du oben mit dem -Argumentlist Parameter und darunter die Nutzung des Parameters in den Skripten.
Wohl mal wieder ein Copy n paster am Werk, na denn viel Spaß ..
Oder mit Live-Output
mir geht's wie gesagt nur darum die Ausgabe in meine GUI umzuleiten.
Ja und? Was hindert dich daran die Variable von oben in die Textbox zu schreiben??$result = Start-Job -FilePath "C:\test.ps1" | Receive-Job -Wait | out-string
$objTextbox.Text = $result
Wie du Parameter an ein Skript übergibst siehst du oben mit dem -Argumentlist Parameter und darunter die Nutzung des Parameters in den Skripten.
Wohl mal wieder ein Copy n paster am Werk, na denn viel Spaß ..
Add-Type -A System.Windows.Forms
$objForm = New-Object System.Windows.Forms.Form
$objForm.Size = New-Object System.Drawing.Size(950,680)
$objForm.BackColor = "Black"
$objForm.StartPosition = "CenterScreen"
$objForm.FormBorderStyle = 'Fixed3D'
$objForm.MaximizeBox = $false
$objForm.KeyPreview = $True
$objForm.Topmost = $false
$objTextbox = New-Object System.Windows.Forms.TextBox
$objTextbox.Location = New-Object System.Drawing.Size(350,10)
$objTextbox.Size = New-Object System.Drawing.Size(550,400)
$objTextbox.Multiline = $true
$objTextbox.TabIndex = 1
$objForm.Controls.Add($objTextbox)
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(10,370)
$OKButton.Size = New-Object System.Drawing.Size(50,23)
$OKButton.Text = "AUSFÜHREN"
$OKbutton.Cursor = [System.Windows.Forms.Cursors]::Hand
$OKbutton.Font = "Arial,8,style=bold"
$OKbutton.AutoSize = $true
$OKbutton.ForeColor = "White"
$OKbutton.backColor = "Green"
$OKbutton.Width = 320
$OKbutton.Height = 40
$OKButton.Add_Click({
$selected = $objCombobox.SelectedItem
$script:x += $objCombobox.SelectedItem
if (![string]::IsNullOrWhiteSpace($selected)) {
#$objLabel.Text = "Performing action $($selected)"
switch ($selected) {
"Skript 1" {
$OKButton.Text = "Skript läuft ..."
$OKButton.Enabled = $false
$result = Start-Job -FilePath "\\server1\folder1\skript1.ps1" -ArgumentList 'Blablub' | Receive-Job -wait | out-string
$objTextbox.Text = $result
$OKButton.Text = "AUSFÜHREN"
$OKButton.Enabled = $true
}
}
$objLabel.Text = "INSTALLATIONEN"
$objCombobox.SelectedIndex = -1
}
})
$objForm.Controls.Add($OKButton)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,120)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = "INSTALLATIONEN"
$objLabel.Forecolor = "White"
$objLabel.Backcolor = "Transparent"
$objLabel.Font = "Arial,8,style=bold"
$objForm.Controls.Add($objLabel)
$objCombobox = New-Object System.Windows.Forms.Combobox
$objCombobox.Text = "Bitte auswählen...."
$objCombobox.Location = New-Object System.Drawing.Size(10,140)
$objCombobox.Size = New-Object System.Drawing.Size(320,20)
$objCombobox.Height = 500
[void] $objCombobox.Items.Add("Skript 1")
[void] $objCombobox.Items.Add("Skript 2")
$objForm.Controls.Add($objCombobox)
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
Oder mit Live-Output
Add-Type -A System.Windows.Forms
$objForm = New-Object System.Windows.Forms.Form
$objForm.Size = New-Object System.Drawing.Size(950,680)
$objForm.BackColor = "Black"
$objForm.StartPosition = "CenterScreen"
$objForm.FormBorderStyle = 'Fixed3D'
$objForm.MaximizeBox = $false
$objForm.KeyPreview = $True
$objForm.Topmost = $false
$objTextbox = New-Object System.Windows.Forms.TextBox
$objTextbox.Location = New-Object System.Drawing.Size(350,10)
$objTextbox.Size = New-Object System.Drawing.Size(550,400)
$objTextbox.Multiline = $true
$objTextbox.TabIndex = 1
$objForm.Controls.Add($objTextbox)
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(10,370)
$OKButton.Size = New-Object System.Drawing.Size(50,23)
$OKButton.Text = "AUSFÜHREN"
$OKbutton.Cursor = [System.Windows.Forms.Cursors]::Hand
$OKbutton.Font = "Arial,8,style=bold"
$OKbutton.AutoSize = $true
$OKbutton.ForeColor = "White"
$OKbutton.backColor = "Green"
$OKbutton.Width = 320
$OKbutton.Height = 40
$OKButton.Add_Click({
$selected = $objCombobox.SelectedItem
$script:x += $objCombobox.SelectedItem
if (![string]::IsNullOrWhiteSpace($selected)) {
#$objLabel.Text = "Performing action $($selected)"
switch ($selected) {
"Skript 1" {
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "powershell.exe"
$pinfo.Arguments = "-EP Bypass -File `"\\server1\folder1\skript1.ps1`""
$pinfo.UseShellExecute = $false
$pinfo.CreateNoWindow = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.RedirectStandardError = $true
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $pinfo
$process.Start() | out-null
while(!$process.HasExited){
$line = $process.StandardOutput.ReadLine()
$objTextBox.Text += $line + "`r`n"
$objTextBox.Update()
}
}
}
$objLabel.Text = "INSTALLATIONEN"
$objCombobox.SelectedIndex = -1
}
})
$objForm.Controls.Add($OKButton)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,120)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = "INSTALLATIONEN"
$objLabel.Forecolor = "White"
$objLabel.Backcolor = "Transparent"
$objLabel.Font = "Arial,8,style=bold"
$objForm.Controls.Add($objLabel)
$objCombobox = New-Object System.Windows.Forms.Combobox
$objCombobox.Text = "Bitte auswählen...."
$objCombobox.Location = New-Object System.Drawing.Size(10,140)
$objCombobox.Size = New-Object System.Drawing.Size(320,20)
$objCombobox.Height = 500
[void] $objCombobox.Items.Add("Skript 1")
[void] $objCombobox.Items.Add("Skript 2")
$objForm.Controls.Add($objCombobox)
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
Zitat von @dispatcher:
ich sehe, egal welches skript ich benutze keine ausgabe in der textbox. klar weißt du nicht welche skripte ich da starten möchte. daher ja auch meine frage ob es möglich ist eine ausgabe in der textbox zu haben auch wenn das zu startende skript eine eingabe verlangt. das ist nämlich bei einigen der fall.
Dann musst du die Skripte so anpassen das sie wie oben schon ganz zu beginn per Code beschrieben habe Übergabeparameter akzeptieren und diese dann als Eingabe nutzen und du diese dann dem Skript per -Argumentlist als Parameter übergibst. Ein Beispiel wie das geht steht im ersten Post.ich sehe, egal welches skript ich benutze keine ausgabe in der textbox. klar weißt du nicht welche skripte ich da starten möchte. daher ja auch meine frage ob es möglich ist eine ausgabe in der textbox zu haben auch wenn das zu startende skript eine eingabe verlangt. das ist nämlich bei einigen der fall.