我有一个应用程序,打开时有时会打开多次。该应用程序有一个进程和后台进程,但有时会打开多个进程。
我正在尝试编写一个 powershell 脚本来启动该应用程序并检查它是否打开了多个并终止不应该存在的进程。
Start-Process -Filepath "path"
Get-Process -Name name* | Where-Object {$_.Id -ne $pid} | stop-process
这是我现在拥有的位,但是这会关闭文件名的所有实例。
我怎样才能关闭有多个实例的地方?
另外,我无法对 PID 进行硬编码,因为每次打开时它都会发生变化。
谢谢
答案1
您要做的是,在启动应用程序时立即获取 ID,然后关闭所有不匹配的内容。
$id = (Start-Process notepad -passthru).ID
Get-Process -Name notepad* | Where-Object {$_.Id -ne $id} | stop-process
上面我用记事本进行了示例,但您可以将其更改为您的进程名称。您可以先打开多个记事本,然后运行此程序进行测试。只有您启动的那个会保留下来。
答案2
在 PowerShell 中终止给定可执行文件的所有进程可以通过以下方式之一完成:
Get–Process "notepad" | Stop–Process
Stop-Process -name explorer
您还可以使用 taskkill 实用程序。