Unable to use IHTMLDocument2

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

Server script runs on

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

Development PC

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

My Windows 10 development PC worked fine with the code above. I want to run this on my Server 2008 R2 x64 machine. I upgraded it to PowerShell v5. I get the following:

Method invocation failed because [System.__ComObject] does not contain a method named 'IHTMLDocument2_write'.

And later down the line...

Unable to find type [mshtml.HTMLDocumentClass].
4 Answers

Updated:

Ironic, how I ran into a similar issue years later, came across this post and went "hey I asked this question".

l0wm3mory's answer is now the correct answer.

Original:

Question that helped: Can't use InternetExplorer.Application object?

Copied Microsoft.mshtml.dll from my machine that worked to the server in C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies. Then added Add-Type -Path "C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\microsoft.mshtml.dll" at the beginning of my script.

I also noticed some IE security boxes appear (when running my script) and it's possible the IE security settings of a Windows server would interfere (being it's much higher than a client would be). Perhaps if my settings were lowered, this would be resolved without copying the .dll. However, I think upgrading to PSv5 was crucial (as even enum wasn't recognized).

I dont't know why,but after installed microsoft office on the computer,everything works fine for me. Tried on two different computer.

I have the problem of the same above and was able to fix it by downloading the dll file from the internet and register it in Powershell. I found the dll at https://www.dllme.com/dll/files/microsoft_mshtml_dll.html by a search but not sure it is official or not. Then I copy it to System32 folder and run the two command lets below.

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

And voice la, the problem gone.

Related