Таким образом, вам нужно будет хранить что-то в родительской области - если вы не хотите хранить объект IE, сохраните URL-адрес, который вы открыли, или еще лучше, дескриптор окна (свойство HWND
, которое должно быть уникальным ). В противном случае у вас не будет надежного способа получить то окно, которое вы хотите, особенно если ваш сеанс открывает другие окна других IE.
# Variable for the created IE window handle
$expectedHWND = $null
# This will enumerate all ShellWindows opened as a COM object in your session
$allShellWindows = ( New-Object -ComObject Shell.Application ).Windows()
# Get the IE object matching the HWND you stored off when you first opened IE
# If you opened other windows in the session, the HWND should be unique so you
# can get the correct window you are expecting
$existingIE = $allShellWindows | Where-Object {
$_.HWND -eq $expectedHWND
}
# Your code, slightly modified
if( $existingIE ){
# You should be able to operate on $existingIE here instead of reassigning it to $IE
Write-Output "Found existing IE session: HWND - $($existingIE.HWND), URL - $($existingIE.LocationURL)"
} else {
$IE = New-Object -com internetexplorer.application;
$IE.visible = $true;
$IE.navigate($url);
$expectedHWND = $IE.HWND
}
Если вы запустите этот дважды, но не устанавливайте $expectedHWND
на $null
во второй раз, он найдет ваше окно IE. Обратите внимание, что это большая работа для того, чтобы избежать хранения переменной в родительской области, но технически выполнимо.
Вам, скорее всего, нужно будет курировать образец выше для вашего конкретного приложения, но служит хорошей демонстрацией получения операционного объекта для ранее открывшегося окна IE.
Хорошо, достаточно использовать полный путь к php.exe
в CMD-команде, если у нас возникли проблемы с переменной PATH:
WShell.Run('cmd /c C:\\my_app_folder\\php\\php.exe -S localhost:80',0,false);