问题与Server 2008 R2上的Internet Explorer ComObject交互

时间:2014-09-18 22:17:07

标签: .net internet-explorer object powershell comobject

好的,所以我编写了一个非常强大的PowerShell脚本来安装和配置SharePoint 2007和SQL 2008.就是这样,请不要评判我。完成所有这些后,由于脚本应该是用户友好的,我开发了一个Web表单来收集输入和显示任务进度。愚蠢的是,我在Windows 8.1上编写了Web表单的所有代码,甚至没有测试将在其上执行脚本的Server 2008 R2上的基本功能。当我将代码交给服务器时,它立即出现故障。当我在Windows 7上测试它时,它工作正常。

以下是Windows 8.1(w / IE 11)和Windows 7(w / IE 9)上的行为:

>$ie = New-Object -ComObject InternetExplorer.Application
>$ie.Navigate('about:blank')
>$ie.visible = $true #Internet explorer is now displayed with a blank page
>$ie.document


Script                            : System.__ComObject
all                               : System.__ComObject
body                              : System.__ComObject
activeElement                     : System.__ComObject
images                            : System.__ComObject
applets                           : System.__ComObject
links                             : System.__ComObject
forms                             : System.__ComObject
anchors                           : System.__ComObject
title                             :
scripts                           : System.__ComObject
designMode                        : Inherit
selection                         : System.__ComObject
readyState                        : complete

这个名单还有一段时间......

现在,当我在Server 2008 R2上运行相同的代码时:

>$ie = New-Object -ComObject InternetExplorer.Application
>$ie.Navigate('about:blank')
>$ie.visible = $true #Internet explorer is now displayed with a blank page
>$ie.document
System.__ComObject

这是一个有点问题,因为脚本非常依赖于写入和读取IE Document对象,并且我所需要的类都没有。相反,没有类可用,甚至是我不需要的类。

那么有没有办法访问Server 2008 R2上的文档对象?我已经完成了我能想到的安全区域设置(尽管我可能已经遗漏了一些东西),并且我已经禁用了增强的安全配置和IE保护模式。我所做的一切似乎都无法让我访问该文档。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

有一件事可能允许你仍然拥有HTML但是如果在PowerShell中编写HTA,并将.hta中的所有必需值导出到.csv文件,然后从中导入这些值。 csv到Windows PowerShell提示符。无论如何不是最干净的解决方案,但它比XAML / WPF容易得多,并且可以在更多平台上使用。唯一的缺点可能是我不知道Windows Server是否支持HTA。如果没有,一个简单的解决方法可能是在客户端计算机上运行参数导出部分,并在服务器上进行实际安装。

另一条路径可能是使用PowerShell脚本在客户端计算机上运行前端时对服务器运行命令。我知道Invoke-Command会让你对服务器运行,但同时授予你使用IE的能力。

抱歉,我无法提供更多建议,但我之前从未尝试在Windows Server上执行此操作。

答案 1 :(得分:0)

通过使用gacutil.exe将Microsoft.mshtml.dll程序集从Windows 8.1计算机部署到Server 2008 R2计算机上的GAC并重新启动PowerShell实例来解决此问题。