有没有一种使用Windows PowerShell停止进程的温和方法?

时间:2010-04-27 16:24:58

标签: powershell

我必须从PowerShell脚本中停止浏览器,我将其用于管理

Stop-Process -Force

然而,这是非常突然的。重新启动浏览器时,它会检测到它没有干净地关闭,并尝试重新启动上一个会话。有什么方法可以告诉它优雅地关闭自己? (“我们有两种方法可以做到这一点......”)

3 个答案:

答案 0 :(得分:10)

尝试此操作来模拟关闭应用的用户:

(Get-Process -Id 10024).CloseMainWindow()

答案 1 :(得分:10)

Keith Hill已经提议使用CloseMainWindow()。但它只是一个关闭的邀请,仍然可能需要一些用户交互,例如一个应用程序可能会显示一些对话框来保存某些东西等。如果一个调用脚本真的希望退出一个进程,我使用这个模式:

# close the window and wait for exit
$_ = Get-Process -Id 12345
[void]$_.CloseMainWindow()
if (!$_.HasExited) {
    Write-Host "Waiting for exit of Pid=$($_.Id)..."
    $_.WaitForExit()
}

答案 2 :(得分:2)

你也可以这样做:

Get-Process <name> | where {$_.MainWindowHandle -ne [System.IntPtr]::Zero} | foreach {$_.CloseMainWindow()}

这将关闭与模式匹配的所有进程并附加一个窗口。例如,Chrome进程可能会使用没有窗口的子进程。这些子流程将被忽略。