web-dev-qa-db-fra.com

Le contenu de la réponse ne peut pas être analysé car le moteur Internet Explorer n'est pas disponible, ou

J'ai besoin de télécharger une série de la chaîne 9 à l'aide de powershell, mais les scripts que j'ai essayés comportent des erreurs:

  1. Ce 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 
      } 
    }
    

    a échoué avec une erreur:

    Le contenu de la réponse ne peut pas être analysé car le moteur Internet Explorer n'est pas disponible ou la configuration du premier lancement d'Internet Explorer n'est pas complète. Spécifiez le paramètre UseBasicParsing et réessayez.

  2. J'ai aussi essayé celui-ci

    # --- 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
    

    avec trop d'erreurs

    http://screencast.com/t/bgGd0s98Uc

65
Luis Valencia

Dans votre demande d'invocation Web, utilisez simplement le paramètre -UseBasicParsing

par exemple. dans votre script (ligne 2), vous devez utiliser:

$rss = Invoke-WebRequest -Uri $url -UseBasicParsing
141
Franco Pettigrosso

Pour que cela fonctionne sans modifier vos scripts:

J'ai trouvé une solution ici: http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

L'erreur est probablement à venir car IE n'a pas encore été lancé pour la première fois, ouvrant la fenêtre ci-dessous. Lancez-le et passez à travers cet écran, puis le message d'erreur ne s'affichera plus. Pas besoin de modifier les scripts.

ie first launch window

21
Matt Hyde

C'est sûr, car la commande Invoke-WebRequest a une dépendance sur les assemblys Internet Explorer et l'appelle pour analyser le résultat selon le comportement par défaut. Comme Matt le suggère, vous pouvez simplement lancer IE et effectuer votre sélection dans les paramètres Invite qui s'affichent au premier lancement. Et l'erreur que vous rencontrez disparaîtra.

Mais cela n’est possible que si vous exécutez vos scripts PowerShell avec le même utilisateur Windows que celui avec lequel vous avez lancé IE. Les paramètres IE sont stockés sous votre profil Windows actuel. Donc, si, comme moi, vous exécutez votre tâche dans un planificateur sur un serveur en tant qu'utilisateur SYSTEM, cela ne fonctionnera pas.

Donc ici, vous devrez changer vos scripts et ajouter l’argument -UseBasicParsing, comme dans cet exemple: $WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing