Убить процесс по имени файла
У меня есть 3 экземпляра приложения из разных мест. Все процессы имеют похожие имена.
Как я могу убить процесс, который был запущен из определенного места?
Ответы
Ответ 1
Вы можете получить путь к приложению:
Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -WhatIf
Это будет работать только для локальной машины. Чтобы завершить удаленные процессы:
Get-WmiObject Win32_Process -Filter "ExecutablePath LIKE '%something%'" -ComputerName server1 | Invoke-WmiMethod -Name Terminate
Ответ 2
Я хотел бы немного улучшить ответ Шей Леви, так как он плохо работал на моей установке (версия 4 powershell)
Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -Force -processname {$_.ProcessName}
Ответ 3
Попробуйте следующее:
http://technet.microsoft.com/en-us/library/ee177004.aspx
Stop-Process -processname notepad
Ответ 4
Вы можете посмотреть свойство MainModule
внутри класса Process
(который можно вызвать через powershell).
foreach (Process process in Process.GetProcesses())
{
if (process.MainModule.FileName == location)
{
process.Kill();
}
}
Я также рассмотрю возможные исключения, которые могут возникать при вызове этого кода. Это может произойти, если вы пытаетесь получить доступ к тем процессам, которые больше не присутствуют (убиты с момента последнего вызова GetProcess) или процессов, пока у вас нет разрешений.
Ответ 5
Приведенная ниже команда убивает процессы, в которых "что-то" является частью пути или является параметром командной строки. Это также полезно для завершения сценариев powershell, таких как powershell -command c:\my-place\something.ps1
running something.ps1
с места c:\my-place
:
gwmi win32_process | Where-Object {$_.CommandLine -like "*something*"} | % { "$(Stop-Process $_.ProcessID)" }
Решение работает локально на моей 64-битной машине Windows 10.