我有 3 个从不同地方运行的应用程序实例。所有进程都有相似的名称。
如何杀死从特定位置启动的进程?
可以获取应用路径:
Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -WhatIf
这仅适用于本地机器。要终止远程进程:
Get-WmiObject Win32_Process -Filter "ExecutablePath LIKE '%something%'" -ComputerName server1 | Invoke-WmiMethod -Name Terminate
我想稍微改进一下 Shay Levy 的答案,因为它在我的设置中效果不佳(powershell 版本 4)
Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -Force -processname {$_.ProcessName}
您可以查看类MainModule
内部的属性Process
(可以通过 powershell 调用)。
foreach (Process process in Process.GetProcesses())
{
if (process.MainModule.FileName == location)
{
process.Kill();
}
}
我还会考虑调用此代码时可能发生的异常。如果您尝试访问不再存在的进程(自上次调用 GetProcess 以来已被终止)或您没有权限的进程,则可能会发生这种情况。
试试这个: http ://technet.microsoft.com/en-us/library/ee177004.aspx
Stop-Process -processname notepad
下面的命令会杀死其中“某物”是路径的一部分或者是命令行参数的进程。它还被证明对于终止 powershell 脚本很有用,例如从地方powershell -command c:\my-place\something.ps1
运行:something.ps1
c:\my-place
gwmi win32_process | Where-Object {$_.CommandLine -like "*something*"} | % { "$(Stop-Process $_.ProcessID)" }
该解决方案在我的 64 位 Windows 10 机器上本地运行。