进程挂起并且无法在 Powershell 中停止进程或终止

Process gets hung up and unable to stop-process or terminate in Powershell

我是 Powershell 和 CMD 脚本的新手,希望您能提供帮助。我在 R 中 运行ning 代码,其中包括使用 shell 命令 运行 一个打开的批处理文件和 运行 另一个程序 Quest Analytics 中的进程。我注意到这会在我的任务管理器中启动一个名为 "QuestConsole.exe." 的进程,Quest 会执行一些操作,然后将文件保存到我的 C 盘并应该关闭。但是,它并不总是关闭并保持挂起状态,内存使用情况没有显示任何变化。在我实际强制在任务管理器中关闭进程之前,R 不会开始我的其余代码。我以这种方式关闭它没有问题,然后 R 可以毫无问题地从它停止的地方开始。我正在通过一个闪亮的应用程序自动将其设计为 运行,因此每次挂断时都无法使用任务管理器将其关闭。因此,我决定尝试构建一个 Powershell 脚本,该脚本在后台连续 运行 并在 QuestConsole.exe 进程处于活动状态超过 6 分钟时终止该进程。

我在 Powershell 中尝试了 2 种不同的方法:

(Get-WmiObject win32_process -Filter “name = ‘QuestConsole.exe’”).Terminate()

Stop-Process -Name QuestConsole

这些都不起作用。没有错误。 Powershell 表现得好像一切正​​常,但 QuestConsole.exe 进程仍在任务管理器中(嘲笑我!)。

我能够在 CMD 中使用它:

Wmic process where name=”QuestConsole.exe” call terminate

我更喜欢用Powershell,因为我已经写好了脚本,学习过程很痛苦。有谁知道在 PowerShell 中终止我的进程的其他方法吗?也许等同于我在 CMD 中使用的命令?此外,我将包含我的 Powershell 脚本,以防有好心人可以帮助我在 CMD 中重写它。

While ($True) {
$startTimeLimit = (Get-Date) - (New-TimeSpan -minutes 6)
$questStart = (Get-Process QuestConsole).StartTime
$eval = $questStart -gt $startTimeLimit
if ($eval -eq $false)
{
    Stop-Process -Name QuestConsole
}
}

Stop-Process -Name QuestConsole 没有充分的理由不能工作。

也就是说,从实用的角度来说,如果 wmic.exe 命令适合您,只需从 PowerShell 调用它即可。

此外,您不应该 运行 您的监控脚本处于紧密循环中 - 在检查之间休眠;因此:

While ($True) {
  if (((Get-Date) - (Get-Process QuestConsole).StartTime).TotalMinutes -ge 6 {
     wmic process where 'name="QuestConsole.exe"' call terminate
  }
  Start-Sleep -Seconds 1
}

注意 wmic 过滤器参数周围的简化条件和 '...' 以确保 " 字符。都通过了。