无法使用 IHTMLDocument2
Unable to use IHTMLDocument2
$wc = New-Object System.Net.WebClient
$DownloadString = $wc.DownloadString("http://www.example.com")
$HTML = New-Object -ComObject "HTMLFile"
$HTML.IHTMLDocument2_write($DownloadString)
服务器脚本 运行s on
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。我得到以下信息:
Method invocation failed because [System.__ComObject] does not contain a method named 'IHTMLDocument2_write'.
然后下线...
Unable to find type [mshtml.HTMLDocumentClass].
更新:
具有讽刺意味的是,几年后我 运行 遇到了类似的问题,遇到了这个 post 并说“嘿,我问了这个问题”。
l0wm3mory 的答案现在是正确答案。
原文:
有帮助的问题:
从我的机器复制 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
都没有被识别)。
我和我的朋友试图确定这个问题。我们在他的机器上不断收到此错误,而同一脚本在我的机器上运行,(两者上的 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)
}
不知道为什么,在电脑上安装了microsoft office后,一切正常。在两台不同的计算机上试过。
我遇到了与上述相同的问题,并且能够通过从互联网下载 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"
声音啦,问题解决了。
$wc = New-Object System.Net.WebClient
$DownloadString = $wc.DownloadString("http://www.example.com")
$HTML = New-Object -ComObject "HTMLFile"
$HTML.IHTMLDocument2_write($DownloadString)
服务器脚本 运行s on
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。我得到以下信息:
Method invocation failed because [System.__ComObject] does not contain a method named 'IHTMLDocument2_write'.
然后下线...
Unable to find type [mshtml.HTMLDocumentClass].
更新:
具有讽刺意味的是,几年后我 运行 遇到了类似的问题,遇到了这个 post 并说“嘿,我问了这个问题”。
l0wm3mory 的答案现在是正确答案。
原文:
有帮助的问题:
从我的机器复制 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
都没有被识别)。
我和我的朋友试图确定这个问题。我们在他的机器上不断收到此错误,而同一脚本在我的机器上运行,(两者上的 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)
}
不知道为什么,在电脑上安装了microsoft office后,一切正常。在两台不同的计算机上试过。
我遇到了与上述相同的问题,并且能够通过从互联网下载 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"
声音啦,问题解决了。