2012-04-22 63 views
16

我有3个应用程序从不同的地方运行的实例。所有进程都有相似的名字。按文件名杀死进程

如何杀死从特定位置启动的进程?

回答

30

你可以得到应用程序的路径:

Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -WhatIf 

这将只对本地机器的工作。要终止远程进程:

Get-WmiObject Win32_Process -Filter "ExecutablePath LIKE '%something%'" -ComputerName server1 | Invoke-WmiMethod -Name Terminate 
+4

第一个解决方案工作,但没有 - 什么如果参数 – rpeshkov 2012-04-22 08:33:31

+1

-WhatIf只是一个安全开关:) – 2012-04-22 10:35:17

+3

如果你用''''''''匹配所有进程并执行该命令,它会崩溃你的系统 – 2012-09-30 23:44:40

0

您可以看看Process类(可以通过powershell调用)内的MainModule属性。

foreach (Process process in Process.GetProcesses()) 
{ 
    if (process.MainModule.FileName == location) 
    { 
     process.Kill(); 
    } 
} 

我还会考虑调用此代码时可能发生的异常。如果您尝试访问不再存在的进程(自上次调用GetProcess以来已经中止),或者在没有权限的情况下执行进程,则可能会发生这种情况。

2

试试这个: http://technet.microsoft.com/en-us/library/ee177004.aspx

Stop-Process -processname notepad 
+0

感谢您的回答,但它不能解决我的任务。 – rpeshkov 2014-03-20 21:20:36

+0

啊,同意了。我没有注意到你需要杀死一个并非全部。你总是可以通过ID杀死进程:)像“杀1432”或什么的。 – Roland 2014-03-21 15:32:03

0

我想稍微改善吉文利维的答案,因为它没有在我的设置(PowerShell的第4版的工作,工作做好)

Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -processname {$_.ProcessName} 
0

以下命令终止其中“something”是路径的一部分或是命令行参数的进程。这也证明了终止PowerShell脚本如
powershell -command c:\my-place\something.ps1从一个地方c:\my-place运行something.ps1有用:

gwmi win32_process | Where-Object {$_.CommandLine -like "*something*"} | % { "$(Stop-Process $_.ProcessID)" } 

该解决方案在当地适用于我的64位Windows 10的机器。