How to Quit current Powershell IE COM session using Try/Catch/Finally
希望在我的脚本结束时,在我的Finally{}语句中终止IE COM Object浏览器会话。
我认为这很简单:
但事实并非如此。在脚本的这个阶段,无法访问$ie对象,并且不能对其调用任何方法。有人知道这是为什么吗?$ie对象是否超出范围?
在我的Try{}声明之前,我已经定义了$ie对象:
1 2 3
| $ie = New-Object -COMObject InternetExplorer.Application
Try{...} |
但在进入Try{}语句之前,我不会实际导航():
1 2 3 4 5 6
| $ie = New-Object -COMObject InternetExplorer.Application
Try{
$ie.navigate("http://www.allregs.com/tpl/Main.aspx")
} |
然后我得到了我的catch{}声明:
1 2 3
| Catch{
write-host"Exception Message: $($_.Exception.Message)" -ForegroundColor Red
} |
最后,我的Finally{}声明:
1 2 3
| Finally{
$ie.Quit() # 'can't call method on System.ComObject.' Null?
} |
你知道我为什么不能在剧本的这个阶段用Quit()来处理当前的$ie过程吗?我错过什么了吗?是否有其他方法可以在不关闭所有Internet Explorer会话的情况下结束当前的Internet Explorer会话?欢迎输入。谢谢。
更新:因此,由于代码从未到达$ie实际导航和获取值的部分,因此最终似乎无法访问$ie。它只在开始时初始化。事实上,我的Invoke-Webrequest请求(登录我)似乎是启动的提示,这就是为什么调用$ie.Quit()什么都不做的原因。我现在的问题是,有没有一种方法可以关闭使用invoke webrequest启动的IE会话?-UseBasicParameter的作用是从启动时起抑制IE,但它也以奇怪的方式破坏了我的代码,因此这似乎不是一个选项。
- 不清楚您在try{}块、finally{}块中是否有$ie.Quit()命令,或者两者都有。如果两者都是,那可能是个问题…
- 只有在finally块中
- 把我的帖子修改得更清楚
- 我认为您需要更新代码示例,以包含更多正在执行的操作,包括如何使用Invoke-WebRequestcmdlet。
- 查看我的其他帖子@link
除非catch{}块中有什么东西会在此时终止脚本/函数,否则您实际上不需要finally{}块。如果脚本/函数能够在try{}catch{}之后继续执行,那么您只需调用$ie.Quit()即可:
1 2 3 4 5 6 7 8 9 10
| $ie = New-Object -COMObject InternetExplorer.Application
try {
$ie.navigate("http://www.allregs.com/tpl/Main.aspx")
}
catch {
Write-Host"Exception Message: $($_.Exception.Message)" -ForegroundColor Red
}
$ie.Quit() |
更新
根据问题中的附加信息,我认为try-catch最终与这里的实际问题没有任何关系,所以我想标题问题的答案是只要$ie仍然是一个有效的应用程序对象,.Quit()方法仍然可以在finally{}块中工作。
- 最后一个块不是清理所必需的吗?参考:为什么试…最后…好;试…抓坏?
- 这可能与这个问题无关,但是这个链接是关于为什么在catch块中不使用catch{}是不好的。在这种情况下,我们正在处理这个异常,尽管只有一个Write-Host通知。
- 好的。我会试着看看我是否能做到不最终阻止。
- 更新了我的帖子。$ie无法退出(),因为它只在开始时初始化,代码从未到达navigate()。实际上,正是invoke webrequests(登录脚本)促使IE启动,现在我需要考虑如何关闭它们。
- 好的,这是一条红鲱鱼。在我不再考虑Try-Catch之前,我建议如果你在一个Try块中做很多事情,也许你应该围绕那些可能引发终止错误的命令使用多个try{} catch{}构造,或者甚至在顶部使用一个trap{}。我会让你自己读的。;-)
- 谢谢,我会读关于trap{}的文章。
- 刚刚看到你的另一个问题。我肯定会把try{}块限制在你需要的地方,否则你还有点工作要做,找出哪一行出错了。