Убить процесс по имени файла

У меня есть 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}

Ответ 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.