4
$wc = New-Object System.Net.WebClient
$DownloadString = $wc.DownloadString("http://www.example.com")
$HTML = New-Object -ComObject "HTMLFile"
$HTML.IHTMLDocument2_write($DownloadString)

服务器脚本运行在

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14409  1005

开发电脑

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      15063  502

我的 Windows 10 开发 PC 在上面的代码中运行良好。我想在我的 Server 2008 R2 x64 机器上运行它。我将它升级到 PowerShell v5。我得到以下信息:

方法调用失败,因为 [System.__ComObject] 不包含名为“IHTMLDocument2_write”的方法。

然后下线...

Unable to find type [mshtml.HTMLDocumentClass].
4

4 回答 4

21

我和我的朋友试图确定这个问题。我们在他的机器上不断收到此错误,而在我的机器上运行相同的脚本(两者上的 Windows 10 构建版本相同)。

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 属性,而在我的计算机上,它具有 IHTML 属性。他确定我的电脑安装了 MS Office,但他没有。他在另一台运行 Server 2008 的计算机上尝试了该代码,该计算机确实安装了 Office(甚至是像 2010 这样的旧版本),并且我们的脚本运行良好。

建议的解决方案:

$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)
}
于 2018-02-19T05:06:04.747 回答
2

更新:

具有讽刺意味的是,几年后我如何遇到类似的问题,遇到了这篇文章并说“嘿,我问了这个问题”。

l0wm3mory 的答案现在是正确的答案。

原来的:

有帮助的问题:不能使用 InternetExplorer.Application 对象?

将 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没有被识别)。

于 2017-09-19T20:39:25.077 回答
0

我不知道为什么,但是在计算机上安装了microsoft office后,一切对我来说都很好。在两台不同的电脑上试过。

于 2019-03-15T12:52:06.737 回答
0

我有上述相同的问题,并且能够通过从互联网下载 dll 文件并将其注册到 Powershell 来修复它。我通过搜索在https://www.dllme.com/dll/files/microsoft_mshtml_dll.html找到了 dll,但不确定它是否是官方的。然后我将它复制到 System32 文件夹并运行下面的两个命令。

Add-Type -Path "C:\Windows\System32\Microsoft.mshtml.dll"
Add-Type -AssemblyName "Microsoft.mshtml"

和声音啦,问题消失了。

于 2020-03-03T00:41:29.730 回答