The response content cannot be parsed because the Internet Explorer engine is not available, or

PowershellInternet Explorer

Powershell Problem Overview


I need to download a channel 9 series using powershell, however the scripts I have tried have errors:

  1. This script

     $url="https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high"
     $rss=invoke-webrequest -uri $url 
     $destination="D:\Videos\OfficePnP"
     [xml]$rss.Content|foreach{ 
       $_.SelectNodes("rss/channel/item/enclosure") 
     }|foreach{ 
         "Checking $($_.url.split("/")[-1]), we will skip it if it already exists in $($destination)"
       if(!(test-path ($destination + $_.url.split("/")[-1]))){ 
         "Downloading: " + $_.url 
         start-bitstransfer $_.url $destination 
       } 
     }
    

failed with error:

> The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again.

  1. I also tried this one

     # --- settings ---
     $feedUrl = "https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high"
     $mediaType = "mp4high"
     $overwrite = $false
     $destinationDirectory = join-path ([Environment]::GetFolderPath("MyDocuments")) "OfficeDevPnP"
     
     # --- locals ---
     $webClient = New-Object System.Net.WebClient
     
     # --- functions ---
     function PromptForInput ($prompt, $default) {
      $selection = read-host "$prompt`r`n(default: $default)"
      if ($selection) {$selection} else {$default}
     }
     
     function DownloadEntries {
      param ([string]$feedUrl) 
      $feed = [xml]$webClient.DownloadString($feedUrl)
      
      $progress = 0
      $pagepercent = 0
      $entries = $feed.rss.channel.item.Length
      $invalidChars = [System.IO.Path]::GetInvalidFileNameChars()
      $feed.rss.channel.item | foreach {
         $url = New-Object System.Uri($_.enclosure.url)
         $name = $_.title
         $extension = [System.IO.Path]::GetExtension($url.Segments[-1])
         $fileName = $name + $extension
     
         $invalidchars | foreach { $filename = $filename.Replace($_, ' ') }
         $saveFileName = join-path $destinationDirectory $fileName
         $tempFilename = $saveFilename + ".tmp"
         $filename
         if ((-not $overwrite) -and (Test-Path -path $saveFileName)) 
         {
             write-progress -activity "$fileName already downloaded" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent
         }
         else 
         {
             write-progress -activity "Downloading $fileName" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent
            $webClient.DownloadFile($url, $tempFilename)
            rename-item $tempFilename $saveFileName
         }
         $pagepercent = [Math]::floor((++$progress)/$entries*100)
       }
     }  
      
     # --- do the actual work ---
     [string]$feedUrl = PromptForInput "Enter feed URL" $feedUrl
     [string]$mediaType = PromptForInput "Enter media type`r`n(options:Wmv,WmvHigh,mp4,mp4high,zune,mp3)" $mediaType
     $feedUrl += $mediaType
     
     [string]$destinationDirectory = PromptForInput "Enter destination directory" $destinationDirectory
      
     # if dest dir doesn't exist, create it
     if (!(Test-Path -path $destinationDirectory)) { New-Item $destinationDirectory -type directory }
      
     DownloadEntries $feedUrl
    

with too many errors

http://screencast.com/t/bgGd0s98Uc

Powershell Solutions


Solution 1 - Powershell

In your invoke web request just use the parameter -UseBasicParsing

e.g. in your script (line 2) you should use:

$rss = Invoke-WebRequest -Uri $url -UseBasicParsing

According to the documentation, this parameter is necessary on systems where IE isn't installed or configured:

> Uses the response object for HTML content without Document Object Model (DOM) parsing. This parameter is required when Internet Explorer is not installed on the computers, such as on a Server Core installation of a Windows Server operating system.

Solution 2 - Powershell

To make it work without modifying your scripts:

I found a solution here: http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

The error is probably coming up because IE has not yet been launched for the first time, bringing up the window below. Launch it and get through that screen, and then the error message will not come up any more. No need to modify any scripts.

ie first launch window

Solution 3 - Powershell

You can disable need to run Internet Explorer's first launch configuration by running this PowerShell script, it will adjust corresponding registry property:

Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Internet Explorer\Main" -Name "DisableFirstRunCustomize" -Value 2

After this, WebClient will work without problems

Solution 4 - Powershell

It is sure because the Invoke-WebRequest command has a dependency on the Internet Explorer assemblies and are invoking it to parse the result as per default behaviour. As Matt suggest, you can simply launch IE and make your selection in the settings prompt which is popping up at first launch. And the error you experience will disappear.

But this is only possible if you run your powershell scripts as the same windows user as whom you launched the IE with. The IE settings are stored under your current windows profile. So if you, like me run your task in a scheduler on a server as the SYSTEM user, this will not work.

So here you will have to change your scripts and add the -UseBasicParsing argument, as ijn this example: $WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing

Solution 5 - Powershell

In Windows 10, where after Edge is installed by the OS (and IE not used at all -- as many users just prefer Chrome after a fresh Windows install), when trying to run a script from localhost using

curl http://localhost:3000/

the same error message is received -- as the one Luis mentioned, followed by this one:

    + curl http://localhost:3000/
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotImplement  
    ed: (:) [Invoke-WebRequest], NotSuppor  
  tedException
    + FullyQualifiedErrorId : WebCmdletIED  
   omNotSupportedException,Microsoft.Powe  
   rShell.Commands.InvokeWebRequestComman  
   d 

If you use instead

Invoke-RestMethod  http://localhost:3000/

the code will work as intended.

I did not try to replicate Luis exact code, however it's still a use case that worked for me.

Also, because the question was asked more than 5 years ago and a best answer was chosen, I decided to still let my answer here just for readers that can use it in another scenario, too (for example when running a code in nodejs and opening a second terminal to test it faster instead of opening a new browser instance)

Solution 6 - Powershell

In your invoke web request just use the parameter -UseBasicParsing

e.g. in your script (line 2) you should use:

$rss = Invoke-WebRequest -UseBasicParsing

According to the documentation, this parameter is necessary on systems where IE isn't installed or configured.

Uses the response object for HTML content without Document Object Model (DOM) parsing. This parameter is required when Internet Explorer is not installed on the computers, such as on a Server Core installation of a Windows Server operating system.

Solution 7 - Powershell

I have had this issue also, and while -UseBasicParsing will work for some, if you actually need to interact with the dom it wont work. Try using a a group policy to stop the initial configuration window from ever appearing and powershell won't stop you anymore. See here https://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

Took me just a few minutes once I found this page, once the GP is set, powershell will allow you through.

Solution 8 - Powershell

Yet another method to solve: updating registry. In my case I could not alter GPO, and -UseBasicParsing breaks parts of the access to the website. Also I had a service user without log in permissions, so I could not log in as the user and run the GUI.
To fix,

  1. log in as a normal user, run IE setup.
  2. Then export this registry key: HKEY_USERS\S-1-5-21-....\SOFTWARE\Microsoft\Internet Explorer
  3. In the .reg file that is saved, replace the user sid with the service account sid
  4. Import the .reg file

In the file

Solution 9 - Powershell

In my case, I had to simply change the curl command to Invoke-RestMethod and the error was gone.

Solution 10 - Powershell

Simply open Internet Explorer, it will show a pop up for settings, click on Use recommended settings, OK and Close it. All good now.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLuis ValenciaView Question on Stackoverflow
Solution 1 - PowershellFranco PettigrossoView Answer on Stackoverflow
Solution 2 - PowershellMatt HydeView Answer on Stackoverflow
Solution 3 - PowershellujeenatorView Answer on Stackoverflow
Solution 4 - PowershellPeter Stjernholm MeldgaardView Answer on Stackoverflow
Solution 5 - PowershellEveView Answer on Stackoverflow
Solution 6 - PowershellVinayView Answer on Stackoverflow
Solution 7 - Powershelleragon2262View Answer on Stackoverflow
Solution 8 - PowershellrayzinnzView Answer on Stackoverflow
Solution 9 - PowershellGChufView Answer on Stackoverflow
Solution 10 - PowershellFarrukhMalikView Answer on Stackoverflow