2012-04-22 87 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的機器。