【发布时间】:2015-11-07 04:20:41
【问题描述】:
我必须通过 PowerShell 脚本停止浏览器,我通过管道将其导入
Stop-Process -Force
但是,这非常突然。当浏览器重新启动时,它检测到它没有完全关闭,并尝试重新启动前一个会话。有什么方法可以告诉它优雅地关闭自己吗? (“我们有两种方法可以做到这一点……”)
【问题讨论】:
标签: powershell
我必须通过 PowerShell 脚本停止浏览器,我通过管道将其导入
Stop-Process -Force
但是,这非常突然。当浏览器重新启动时,它检测到它没有完全关闭,并尝试重新启动前一个会话。有什么方法可以告诉它优雅地关闭自己吗? (“我们有两种方法可以做到这一点……”)
【问题讨论】:
标签: powershell
试试这个来模拟用户关闭应用:
(Get-Process -Id 10024).CloseMainWindow()
【讨论】:
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()
}
【讨论】:
$_ 似乎是一个非常糟糕的主意。
您也可以这样做:
Get-Process <name> | where {$_.MainWindowHandle -ne [System.IntPtr]::Zero} | foreach {$_.CloseMainWindow()}
这将关闭所有与模式匹配的进程并附加一个窗口。例如,Chrome 进程可能会使用没有窗口的子进程。这些子流程将被忽略。
【讨论】: