Internet Explorerエンジンが使用できないため、応答コンテンツを解析できません。


108

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


2
あなたの問題への答えはエラーメッセージにあります(UseBasicParsingパラメーターを使用してください)
bluuf 2016年

38
公平を期すために、エラーメッセージに「InternetExplorer」という単語が表示され、コマンドラインユーティリティがIEに依存している理由について盲目的に怒り狂うと、メッセージの残りの部分を無視するのは簡単です。
MisterZimbu 2017年

回答:


219

Web呼び出し要求では、パラメーターを使用するだけです -UseBasicParsing

たとえば、スクリプト(2行目)では、次のものを使用する必要があります。

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

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

ドキュメントオブジェクトモデル(DOM)を解析せずに、HTMLコンテンツの応答オブジェクトを使用します。このパラメーターは、WindowsServerオペレーティングシステムのServerCoreインストールなど、InternetExplorerがコンピューターにインストールされていない場合に必要です。


17
何に興味を持って、将来の訪問者のためにUseBasicParsing:やっている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.ここからコピー:docs.microsoft.com/de-de/powershell/module/...
ブルーノBieri

39

スクリプトを変更せずに機能させるには:

ここで解決策を見つけました:http//wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

IEがまだ初めて起動されていないため、エラーが発生している可能性があり、下のウィンドウが表示されます。それを起動してその画面を通過すると、エラーメッセージは表示されなくなります。スクリプトを変更する必要はありません。

つまり、最初の起動ウィンドウ


PowerShellを使用するための一連の自動化されたプロセスのために、Server2008サーバーからServer2012R2にすべてのスクリプトを更新する必要なしに私のために働きました。これは特定のアカウントを使用していたので、サーバーにサインオンしたそのアカウントで実際にこれを実行する必要がありました。
ビットコイン殺人マニアック2018年

11
これはエラーを取り除きますが、PowerShellが自動化プラットフォームとして使用されることを意図していることを考えると、GUIを介して問題を解決する必要性は受け入れられない答えです。この回答は、たとえばPowerShell RemotingSession内のすべてのシナリオで機能するとは限りません。
Devon Dieffenbach 2018年

2
グループポリシーオブジェクト(GPO)を使用して、最初の実行ウィザードを処理します:[コンピューターの構成]> [ポリシー]> [管理用テンプレート]> [Windowsコンポーネント]> [InternetExplorer]。設定しEnabledに「ポリシー「を防ぐにはまず実行ウィザードを実行している」とスーツあなたというオプションを選択します。
techie007

私はkubectlyプロキシでこの問題を抱えていましたが、curlを使用するとこれが修正されました。ありがとう!
gpbaculio

このシナリオは、アプリをある種の自動スケーリンググループ内にある場合にも機能しません。これは、スピンアップされる新しいインスタンスがこれを毎日/毎週など必要とするためです。-UseBasicParsingを使用するのが最適
Ryan C

10

Invoke-WebRequestコマンドはInternetExplorerアセンブリに依存しており、デフォルトの動作に従って結果を解析するためにそれを呼び出しているためです。Mattが示唆しているように、IEを起動して、最初の起動時にポップアップする設定プロンプトで選択を行うことができます。そして、あなたが経験するエラーは消えます。

ただし、これは、IEを起動したときと同じWindowsユーザーとしてPowerShellスクリプトを実行する場合にのみ可能です。IE設定は、現在のWindowsプロファイルの下に保存されます。したがって、私のように、サーバー上のスケジューラーでSYSTEMユーザーとしてタスクを実行する場合、これは機能しません。

したがって、ここでは、次の例のように、スクリプトを変更して-UseBasicParsing引数を追加する必要があります。 $WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing


7

このPowerShellスクリプトを実行すると、InternetExplorerの最初の起動構成を実行する必要性を無効にできます。対応するレジストリプロパティが調整されます。

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

この後、WebClientは問題なく動作します


残念ながら、これはGUIバージョンでのみ正常に機能し、Windows ServerCoreでは機能しません。
ルーク

1
大丈夫@Luke、私は、Windows Server Coreのためのソリューションを発見しようとします
ujeenator

1

私もこの問題を抱えており、-UseBasicParsingは一部では機能しますが、実際にdomと対話する必要がある場合は機能しません。グループポリシーを使用して、初期構成ウィンドウが表示されないようにしてみてください。PowerShellで停止することはありません。ここを参照して くださいhttps://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

このページを見つけてからほんの数分で、GPが設定されると、PowerShellで処理できるようになります。


1

Web呼び出し要求では、パラメーター-UseBasicParsingを使用するだけです。

たとえば、スクリプト(2行目)では、次のものを使用する必要があります。

$rss = Invoke-WebRequest -UseBasicParsing

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

ドキュメントオブジェクトモデル(DOM)を解析せずに、HTMLコンテンツの応答オブジェクトを使用します。このパラメーターは、WindowsServerオペレーティングシステムのServerCoreインストールなど、InternetExplorerがコンピューターにインストールされていない場合に必要です。


0

解決するさらに別の方法:レジストリの更新。私の場合、GPOを変更できず、-UseBasicParsingはWebサイトへのアクセスの一部を中断します。また、ログイン権限のないサービスユーザーがいたため、ユーザーとしてログインしてGUIを実行することができませんでした。
修正するには、

  1. 通常のユーザーとしてログインし、IEセットアップを実行します。
  2. 次に、次のレジストリキーをエクスポートします:HKEY_USERS \ S-1-5-21 -.... \ SOFTWARE \ Microsoft \ Internet Explorer
  3. 保存されている.regファイルで、ユーザーsidをサービスアカウントsidに置き換えます
  4. .regファイルをインポートします

ファイル内

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.