Kill all processes by name with Powershell
A reader commented on a previous post pointing out a deficiency in one of the scripts used to kill processes on remote computers. If more than one instance of the specified process was running on the target computer the script would buckle. This is pretty easy to rectify. The below script will kill all process instances on the target machine.
# Kill all processes on a remote machine with a specific name $computer = "localhost"; $processToKill = "notepad.exe"; $process = Get-WmiObject -Class Win32_Process -Filter "Name = '$processToKill'" -ComputerName $computer; if($process -eq $null) { # If null then the process may not be running Write-Host -ForegroundColor Red "Couldn't get process $processToKill on $computer"; sleep(10); exit; } else { Write-Host "Attempting to Kill $processToKill on $computer"; } # This original part of the script dies if $process is an array of more than one calc.exe process # Kill the process and get exit status 0 = OK # $status = $process.InvokeMethod("Terminate", $null); # switch($status) # { # 0 { Write-Host -ForegroundColor Green "Killed $processToKill on $computer"}; # default { Write-Host -ForegroundColor Red "Error, couldn't kill $processToKill on $computer"}; #}; $count = 1; # This will work regardless if $process is an array or not foreach ($ps in $process) { Write-Host "Kill count = $count"; Write-Host "Handle = " $ps.Handle; $status = $ps.InvokeMethod("Terminate", $null); switch($status) { 0 { Write-Host -ForegroundColor Green "Killed $processToKill on $computer"}; default { Write-Host -ForegroundColor Red "Error, couldn't kill $processToKill on $computer"}; }; $count++; } |
This will procedure output similar to below.
Attempting to Kill notepad.exe on localhost Kill count = 1 Handle = 3788 Killed notepad.exe on localhost Kill count = 2 Handle = 4916 Killed notepad.exe on localhost Kill count = 3 Handle = 5884 Killed notepad.exe on localhost Kill count = 4 Handle = 3488 Killed notepad.exe on localhost Kill count = 5 Handle = 6232 Killed notepad.exe on localhost
A similar thing can be achieved , on the localhost, with a one-liner.
# Kills all processes called 'calc' on the localhost ps calc | kill; |
With a little bit of Remoting, available in Powershell V2, it would be simple enough to achieve the same functionality in the one-liner to execute this on remote computers.




