Как правильно закрыть Internet Explorer при запуске из PowerShell?

Был набор недавно заданных вопросов о том, как что-то делать с Internet Explorer через PowerShell. Все они содержат коды для запуска IE из PowerShell как объекта через$ie=new-object -comobject InternetExplorer.Application, Проблема в том, как правильнозакрытие IE, который состоит из вызова$ie.quit() не работает - во-первых, если бы в этом IE было более одной открытой вкладки, то IE не закрывается в целом, и закрывается только вкладка, соответствующая COM-объекту, и, во-вторых, если он имеет только вкладка, окно закрывается, но процессы остаются.

PS > get-process iexplore

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    352      31     7724      24968   142     0,58   3236 iexplore
    228      24    22800      15384   156     0,19   3432 iexplore

Я пытался исследовать методы, как закрыть процесс, начатый черезNew-Object -ComObjectи нашли это:Как избавиться от COMObject, Примером этого COMObject являетсяExcel.Applicationкоторый действительно ведет себя как задумано - звонитquit() закрывает окно и выполняет[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ex) если$ex это созданный COMObject останавливает процесс Excel. Но это не относится к Internet Explorer.

Я также нашел этот вопрос:Как получить существующий COM-объект работающего IE который предоставляет код для подключения к IE через список открытых окон и работает в той степени, в которой IE запускается из другого места, но если COM-объект создается с помощью PowerShell, этот сценарий не сможет полностью остановить процессы IE, если он будет изменен следующим образом:

$shellapp = New-Object -ComObject "Shell.Application"
$ShellWindows = $shellapp.Windows()
for ($i = 0; $i -lt $ShellWindows.Count; $i++)
{
 if ($ShellWindows.Item($i).FullName -like "*iexplore.exe")
  {
  $ie = $ShellWindows.Item($i)
  $ie.quit()
  [System.Runtime.Interopservices.Marshal]::ReleaseComObject($ie)
  }
}

В случае запуска IE вне PowerShell процессы останавливаются, но в случае запуска IE в PowerShell остаются два процесса, и этот код сообщает, что не обнаружил окон IE для доступа к COM-объектам, поэтому процессы IE (пока) не могут (пока) быть остановленным.

Итак, как добраться до явно осиротевших процессов IE без окон иизящно Останови их? Я в курсеGet-Process iexplore | Stop-Process, но это остановит все без исключения IE, не только те, которые запускаются скриптом, и если скрипт запускается от имени администратора илиSYSTEM скажем, на сервере удаленного рабочего стола все IE будут остановлены.

Среда: ОС Windows 7 x64, PowerShell 4 (установлена ​​выше PS версии 2), IE11 версия 11.0.9600.17691 (автоматически обновляется). IE установлен на "Открыть домашнюю страницу" при запуске, поэтому всегда открыта хотя бы одна вкладка.

Ответы на вопрос(2)

Ваш ответ на вопрос