1. ホーム
  2. powershell

[解決済み] Internet Explorerのエンジンが利用できないため、応答内容を解析できない、または

2022-04-25 14:05:53

質問

powershellを使用してチャンネル9シリーズをダウンロードする必要がありますが、私が試したスクリプトはエラーになります。

  1. このスクリプト

    $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 
      } 
    }
    
    

    エラーで失敗しました。

    Internet Explorerのエンジンが利用できないか、Internet Explorerの初回起動時の設定が完了していないため、応答内容を解析することができません。UseBasicParsingパラメータを指定して再試行してください。

  2. こんなのも試してみました

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

    エラー多発で

    http://screencast.com/t/bgGd0s98Uc

解決方法は?

Webリクエストの呼び出しで、パラメータ -UseBasicParsing

例えば、スクリプト(2行目)では、次のように記述します。

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

によると ドキュメント このパラメータは、IEがインストールされていない、または設定されていないシステムで必要です。

<ブロッククオート

DOM (Document Object Model) の解析を行わずに、HTML コンテンツのレスポンスオブジェクトを使用します。このパラメーターは、Windows ServerオペレーティングシステムのServer Coreインストールなど、コンピューターにInternet Explorerがインストールされていない場合に必要です。