首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用IHTMLDocument2

无法使用IHTMLDocument2
EN

Stack Overflow用户
提问于 2017-09-19 19:00:23
回答 4查看 8.1K关注 0票数 6
代码语言:javascript
复制
$wc = New-Object System.Net.WebClient
$DownloadString = $wc.DownloadString("http://www.example.com")
$HTML = New-Object -ComObject "HTMLFile"
$HTML.IHTMLDocument2_write($DownloadString)

服务器脚本运行在

代码语言:javascript
复制
Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14409  1005

开发PC

代码语言:javascript
复制
Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      15063  502

我的Windows 10开发PC与上面的代码工作得很好。我想在我的服务器2008 R2 x64机器上运行这个程序。我把它升级为PowerShell v5。我得到以下信息:

方法调用失败,因为System.__ComObject不包含名为“IHTMLDocument2 2_write”的方法。

后来的话..。

代码语言:javascript
复制
Unable to find type [mshtml.HTMLDocumentClass].
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-19 05:06:04

我和我的朋友试图弄清这件事。我们一直在他的机器上得到这个错误,而在我的机器上使用相同的脚本(在这两个版本上都使用相同的Windows 10构建版本)。

代码语言:javascript
复制
Method invocation failed because [System.__ComObject] does not contain a method named 'IHTMLDocument2_write'.
At <script_path\script_name>:184 char:1
+ $HTML.IHTMLDocument2_write($content)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (IHTMLDocument2_write:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

我们发现,在他的计算机上,$html对象具有ie9属性,而在我的计算机上,它具有。他确认我的电脑安装了MS Office,但他没有安装。他在运行Server 2008的另一台计算机上尝试了这些代码,这些计算机安装了Office (甚至是像2010这样的旧版本),而且我们的脚本运行得很好。

建议的解决方案:

代码语言:javascript
复制
$HTML = New-Object -Com "HTMLFile"

try {
    # This works in PowerShell with Office installed
    $html.IHTMLDocument2_write($content)
}
catch {
    # This works when Office is not installed    
    $src = [System.Text.Encoding]::Unicode.GetBytes($content)
    $html.write($src)
}
票数 23
EN

Stack Overflow用户

发布于 2017-09-19 20:39:25

更新:

讽刺的是,几年后我遇到了一个类似的问题,遇到了这篇文章,说“嘿,我问了这个问题”。

我的答案现在是正确的了。

原版:

有帮助的问题:Can't use InternetExplorer.Application object?

将Microsoft.mshtml.dll从我的机器复制到C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies中的服务器。然后在脚本的开头添加了Add-Type -Path "C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\microsoft.mshtml.dll"

我还注意到出现了一些IE安全盒(在运行我的脚本时),而且Windows服务器的IE安全设置可能会发生干扰(因为它比客户机高得多)。也许,如果我的设置被降低,这将在不复制.dll的情况下得到解决。然而,我认为升级到PSv5是至关重要的(因为即使是enum也没有被识别)。

票数 2
EN

Stack Overflow用户

发布于 2019-03-15 12:52:06

我不知道为什么,但是在电脑上安装了微软办公室之后,一切都很好。在两台不同的电脑上试过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46307976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档