Есть ли мягкий способ остановки процессов с помощью Windows PowerShell? - PullRequest
15 голосов
/ 27 апреля 2010

Я должен остановить браузер от сценария PowerShell, что я делаю, передав его в

Stop-Process -Force

Однако это очень неожиданно. Когда браузер перезапускается, он обнаруживает, что он не завершил работу, и пытается перезапустить предыдущий сеанс. Есть ли какой-то способ, которым я могу сказать, чтобы он изящно закрылся? («Есть два способа сделать это ...»)

Ответы [ 3 ]

12 голосов
/ 27 апреля 2010

Попробуйте симулировать закрытие приложения пользователем:

(Get-Process -Id 10024).CloseMainWindow()
11 голосов
/ 27 апреля 2010

Кит Хилл уже предложил использовать 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 голосов
/ 06 ноября 2015

Вы также можете сделать это:

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

Это закроет все процессы, которые соответствуют шаблону, и к ним будет прикреплено окно. Например, процесс Chrome может использовать подпроцессы, которые не имеют окна. Эти подпроцессы будут игнорироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...