进程挂起并且无法在 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
过滤器参数周围的简化条件和 '...'
以确保 "
字符。都通过了。
我是 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
过滤器参数周围的简化条件和 '...'
以确保 "
字符。都通过了。