我有一个恼人的问题,我在调用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
中不再有任何属性。
这里发生了什么?我很确定我之前使用过这段代码,但也许我错过了什么?
答案 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。