调用Navigate

时间:2018-01-05 02:46:34

标签: .net powershell comobject

我有一个恼人的问题,我在调用InternetExplorer.Application后无法获得ComObject Navigate的任何属性:

$ie = new-object -com InternetExplorer.Application
$ie.navigate("https://the.url")
$ie.visible = $true
while ($ie.ReadyState -ne 4) { start-sleep -m 100; Write-Host $ie.ReadyState }

脚本卡在while循环中,并且不会向ReadyState的控制台输出任何内容。

单步执行ISE中的代码,我可以看到在调用Navigate之前,所有属性都可用且ReadyState包含值0,但只要Navigate $ie 1}}被调用在app.logger中不再有任何属性。

这里发生了什么?我很确定我之前使用过这段代码,但也许我错过了什么?

1 个答案:

答案 0 :(得分:0)

也许是因为你以前开过IE?以下代码适用于我的预期:它检查是否已有Internet Explorer实例,如果没有,则创建一个新实例,运行代码并退出。

$ie = $null
$newInstance = $false
if (Get-Process iexplore -ea silentlycontinue | Where-Object {$_.MainWindowTitle -ne ""}) {
    $ie = (New-Object -COM "Shell.Application").Windows() | ? { $_.Name -eq "Internet Explorer" } | Select-Object -First 1
    sleep -milliseconds 500
    $ie.visible = $true
    $newInstance = $false
} else {
    $ie = New-Object -COM "InternetExplorer.Application"
    sleep -milliseconds 500
    $ie.visible = $true
    $newInstance = $true
}

$ie.Navigate("www.bing.com");

Write-Host $ie.ReadyState
while ($ie.ReadyState -ne 4) {
    start-sleep -m 100; Write-Host $ie.ReadyState
}

$ie.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ie)
Remove-Variable ie

PS:之后总是release COM objects properly