Ответ 1
Попробуйте это, чтобы имитировать пользователя, закрывающего приложение:
(Get-Process -Id 10024).CloseMainWindow()
Мне нужно остановить браузер от PowerShell script, который я делаю, связав его с
Stop-Process -Force
Однако это очень круто. Когда браузер перезагружается, он обнаруживает, что он не отключился, и пытается перезапустить предыдущий сеанс. Есть ли какой-то способ, который я могу сказать, чтобы он изящно закрылся? ( "Есть два способа сделать это..." )
Попробуйте это, чтобы имитировать пользователя, закрывающего приложение:
(Get-Process -Id 10024).CloseMainWindow()
Кейт Хилл уже предложил использовать 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()
}
Вы также можете сделать это:
Get-Process <name> | where {$_.MainWindowHandle -ne [System.IntPtr]::Zero} | foreach {$_.CloseMainWindow()}
Это закроет все процессы, соответствующие шаблону, и приложит к ним окно. Например, процесс Chrome может использовать подпроцессы, которые не имеют окна. Эти подпроцессы будут игнорироваться.