Подтвердить что ты не робот

Есть ли способ остановить процессы с помощью Windows PowerShell?

Мне нужно остановить браузер от PowerShell script, который я делаю, связав его с

Stop-Process -Force

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

4b9b3361

Ответ 1

Попробуйте это, чтобы имитировать пользователя, закрывающего приложение:

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

Ответ 2

Кейт Хилл уже предложил использовать CloseMainWindow(). Но это только приглашение закрыть, возможно, потребуется некоторое взаимодействие с пользователем, например, приложение может отображать некоторые диалоги для сохранения чего-либо и т.д. Если вызов script действительно ожидает завершения процесса, я использую этот шаблон:

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

Ответ 3

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

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

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