Powershelle Prozess über Out-Grid-View stoppen
Hallo,
ich habe folgenden Code:
Gibt es einen Kill Befehl sodass man im ogv Fenster die Prozesse auswählen kann die gestoppt werden sollen?
Im grunde möchte ich das gleiche wie das hier:
Nur ist das für meinen Code nicht wirklich anwendbar, da es nicht über WMI läuft. Danke im Voraus.
ich habe folgenden Code:
Get-WmiObject Win32_Process -computername $objListbox.SelectedItems -Filter "Name='firefox.exe' OR Name='AcroRd32.exe'" |
select Name, Path, PSComputername, @{n="User";e={$_.GetOwner().user}} | sort PSComputername | ogv -title "Prozesse" -PassThru |
Gibt es einen Kill Befehl sodass man im ogv Fenster die Prozesse auswählen kann die gestoppt werden sollen?
Im grunde möchte ich das gleiche wie das hier:
Get-Process |
Out-GridView -PassThru |
Stop-Process
Nur ist das für meinen Code nicht wirklich anwendbar, da es nicht über WMI läuft. Danke im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 254441
Url: https://administrator.de/contentid/254441
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo Bugger,
GUI-Beispiele mit einem DataGridView findest du hier:
Grüße Uwe
GUI-Beispiele mit einem DataGridView findest du hier:
- Powershell - GUI für offene Netzwerk-Sessions (net session) und offene Dateihandles (net file)
- PowerShell VPN Monitoring
Grüße Uwe
Hier eine Beispiel-Form zum Auflisten und Beenden von Prozessen. In der Demo werden die lokalen Prozesse aufgelistet, aber das kannst du ja in den Parametern von Get-WmiObject ändern.
Grüße Uwe
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$btnKill = New-Object System.Windows.Forms.Button
$dgv = New-Object System.Windows.Forms.DataGridView
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
# Event Script Blocks
#----------------------------------------------
$update_gridview = {
$processes = gwmi Win32_Process -ComputerName localhost | select Name,Path,PSComputername,@{n="User";e={$_.GetOwner().user}},ProcessId
$arrList = New-Object System.Collections.ArrayList
$arrList.AddRange($processes)
$dgv.DataSource = $arrList
}
$btnKill_OnClick=
{
$sel_proc = $dgv.Rows[$dgv.SelectedRows[0].Index].Cells['ProcessId'].Value
[System.Windows.Forms.MessageBox]::Show("Killing Process wih ID: $sel_proc")
gwmi Win32_Process -ComputerName localhost -Filter "ProcessId='$sel_proc'" | %{$_.Terminate()}
&$update_gridview
}
$handler_form1_Load=
{
&$update_gridview
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 307
$System_Drawing_Size.Width = 525
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"
$form1.Text = "Prozesse"
$form1.add_Load($handler_form1_Load)
$btnKill.Anchor = 10
$btnKill.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 419
$System_Drawing_Point.Y = 278
$btnKill.Location = $System_Drawing_Point
$btnKill.Name = "btnKill"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 94
$btnKill.Size = $System_Drawing_Size
$btnKill.TabIndex = 1
$btnKill.Text = "Kill process"
$btnKill.UseVisualStyleBackColor = $True
$btnKill.add_Click($btnKill_OnClick)
$form1.Controls.Add($btnKill)
$dgv.AllowUserToAddRows = $False
$dgv.AllowUserToDeleteRows = $False
$dgv.AllowUserToResizeRows = $False
$dgv.Anchor = 15
$dgv.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$dgv.Location = $System_Drawing_Point
$dgv.MultiSelect = $False
$dgv.Name = "dgv"
$dgv.ReadOnly = $True
$dgv.RowHeadersVisible = $False
$dgv.RowHeadersWidth = 40
$dgv.SelectionMode = 1
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 260
$System_Drawing_Size.Width = 501
$dgv.Size = $System_Drawing_Size
$dgv.TabIndex = 0
$form1.Controls.Add($dgv)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
#Call the Function
GenerateForm
Ach jetzt weis ich was du meinst, sorry, war gerade auf dem falschen Dampfer Du kannst du es natürlich auch so mit Out-GridView machen:
indem du dann einfach die Terminate()-Methode für jedes in der Pipe übergebene Objekt aufrufst.
.............. | sort PSComputername | ogv -title "Prozesse" -PassThru | %{$_.Terminate()}
Zitat von @Bugger:
Fehler beim Aufrufen der Methode, da [Selected.System.Management.ManagementObject] keine Methode mit dem Namen
"Terminate" enthält.
ah ja stimmt, der geht so nur wenn keine Selects davor sitzen.Fehler beim Aufrufen der Methode, da [Selected.System.Management.ManagementObject] keine Methode mit dem Namen
"Terminate" enthält.
Alternativ geht es aber auch so:
........ | sort PSComputername | ogv -title "Prozesse" -PassThru | %{gwmi Win32_Process -Computername XYZ -Filter "Name='$($_.Name)'" | %{$_.Terminate()}}
Zitat von @Bugger:
Ja, so funktioniert es, vielen Dank! Der andere "Taskmanager" ist aber auch klasse.^^
Hast du noch eine Idee bzgl. der Vordergrund Problematik?
Ohne zu wissen wie deinen Code aussieht, schwer zu sagen.Ja, so funktioniert es, vielen Dank! Der andere "Taskmanager" ist aber auch klasse.^^
Hast du noch eine Idee bzgl. der Vordergrund Problematik?
Hier hast du ein Beispiel mit 2 Forms, die HauptForm ruft den Taskmanager auf welcher im Vordergrund als Child-Form läuft.
function TaskmanagerForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$btnKill = New-Object System.Windows.Forms.Button
$dgv = New-Object System.Windows.Forms.DataGridView
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
$update_gridview = {
$processes = gwmi Win32_Process -ComputerName localhost | select Name,Path,PSComputername,@{n="User";e={$_.GetOwner().user}},ProcessId
$arrList = New-Object System.Collections.ArrayList
$arrList.AddRange($processes)
$dgv.DataSource = $arrList
}
$btnKill_OnClick=
{
$sel_proc = $dgv.Rows[$dgv.SelectedRows[0].Index].Cells['ProcessId'].Value
[System.Windows.Forms.MessageBox]::Show("Killing Process wih ID: $sel_proc")
gwmi Win32_Process -ComputerName localhost -Filter "ProcessId='$sel_proc'" | %{$_.Terminate()}
&$update_gridview
}
$handler_form1_Load=
{
&$update_gridview
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 307
$System_Drawing_Size.Width = 525
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"
$form1.Text = "Prozesse"
$form1.add_Load($handler_form1_Load)
$btnKill.Anchor = 10
$btnKill.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 419
$System_Drawing_Point.Y = 278
$btnKill.Location = $System_Drawing_Point
$btnKill.Name = "btnKill"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 94
$btnKill.Size = $System_Drawing_Size
$btnKill.TabIndex = 1
$btnKill.Text = "Kill process"
$btnKill.UseVisualStyleBackColor = $True
$btnKill.add_Click($btnKill_OnClick)
$form1.Controls.Add($btnKill)
$dgv.AllowUserToAddRows = $False
$dgv.AllowUserToDeleteRows = $False
$dgv.AllowUserToResizeRows = $False
$dgv.Anchor = 15
$dgv.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$dgv.Location = $System_Drawing_Point
$dgv.MultiSelect = $False
$dgv.Name = "dgv"
$dgv.ReadOnly = $True
$dgv.RowHeadersVisible = $False
$dgv.RowHeadersWidth = 40
$dgv.SelectionMode = 1
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 260
$System_Drawing_Size.Width = 501
$dgv.Size = $System_Drawing_Size
$dgv.TabIndex = 0
$form1.Controls.Add($dgv)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
# Main Form
function GenerateMainForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$button1 = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
#Provide Custom Code for events specified in PrimalForms.
$handler_button1_Click=
{
TaskmanagerForm
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 272
$System_Drawing_Size.Width = 292
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"
$form1.Text = "Primal Form"
$button1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$button1.Location = $System_Drawing_Point
$button1.Name = "button1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$button1.Size = $System_Drawing_Size
$button1.TabIndex = 0
$button1.Text = "button1"
$button1.UseVisualStyleBackColor = $True
$button1.add_Click($handler_button1_Click)
$form1.Controls.Add($button1)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
GenerateMainForm
Zitat von @Bugger:
Mein Script basiert auf den Multi Select Box von Microsoft, wenn du da den Fehler findest, findest du ihn auch bei mir:
http://technet.microsoft.com/en-us/library/ff730950.aspx
Na dann ist es klar. Dein Problem verursacht folgende Zeile im Script, die die Haupt-Form immer im Vordergrund darstelltMein Script basiert auf den Multi Select Box von Microsoft, wenn du da den Fehler findest, findest du ihn auch bei mir:
http://technet.microsoft.com/en-us/library/ff730950.aspx
$objForm.Topmost = $True
Grüße Uwe