Убить процесс по имени и владельцу?

12

Перед тем, как смотреть в изобретать колесо и катиться самостоятельно, кто - нибудь в курсе прикладной / утилита , которая позволяет мне убивать процессы, фильтрация по имени процесса как и владельца процесса? Или это можно сделать с помощью powershell? (К сожалению, моей PowerShell-фу не хватает).

Я смотрел на оба pskillи taskkill. Хотя pskillпозволяет завершить по имени процесса, он не позволяет мне дополнительно фильтровать по владельцу процесса. Я также посмотрел на WMI через wmic ( wmic process), но интерфейс WMI не возвращает владельца процесса (по крайней мере из того, что я могу сказать), поэтому не могу использовать это также.

Обоснование
Я делаю кусок разработки на Windows. Частично это связано с работой с компонентными службами (COM +). В COM + есть общий хост-процесс - dllhost.exe, который используется как для пользовательских (т.е. разработанных мною) элементов, так и для системных процессов. Я могу различить их по владельцу, которым они управляют. Так, например, я хочу уничтожить все принадлежащие мне процессы dllhost.exe, но игнорировать те, которые принадлежат SYSTEM.

Это избавило бы меня от необходимости регулярно заходить в диспетчер задач, выявлять и вручную убивать каждого из них :-)

Крис Дж
источник

Ответы:

5

В powershell вы бы сделали:

gwmi -query "select * from win32_process where name='PROCESSNAME.exe'" | %{if($_.GetOwner().User -eq 'USERNAME'){$_.terminate()}}
EBGreen
источник
Ах - отличные ура. Это хорошо работает :-)
Крис Дж
24

Вы не выглядели достаточно усердно.

taskkill /f /fi "imagename eq foo.exe" /fi "username eq Chris"

Вы можете даже фильтровать по загруженным модулям, используя /fi "modules eq libfoo.dll".

user1686
источник
2
Гораздо проще, чем метод PS :)
EBGreen
Ты прав - я не выглядел достаточно усердно. Это плохо с моей стороны.
Крис Джей