Вміст відповіді не можна проаналізувати, оскільки механізм Internet Explorer недоступний, або


107

Мені потрібно завантажити канал 9 серії за допомогою PowerShell, однак сценарії, які я пробував, мають помилки:

  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

38
Справедливості заради, легко побачити слова "Internet Explorer" у повідомленні про помилку та проігнорувати решту повідомлення, коли ви впадаєте у сліпу лють від того, чому утиліта командного рядка залежить від IE.
MisterZimbu

Відповіді:


218

У вашому веб-запиті на виклик просто використовуйте параметр -UseBasicParsing

наприклад, у вашому сценарії (рядок 2) ви повинні використовувати:

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

Згідно з документацією , цей параметр необхідний у системах, де IE не встановлено або не налаштовано:

Використовує об'єкт відповіді для вмісту HTML без аналізу об'єктної моделі документа (DOM). Цей параметр необхідний, коли Internet Explorer не інстальовано на комп'ютерах, наприклад під час встановлення Server Core операційної системи Windows Server.


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/…
Бруно

39

Щоб це працювало, не змінюючи сценарії:

Я знайшов рішення тут: http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

Помилка, мабуть, з’являється, оскільки IE ще не запущений вперше, відкривши вікно нижче. Запустіть його та пройдіть через цей екран, і тоді повідомлення про помилку більше не з’являється. Не потрібно змінювати будь-які сценарії.

тобто перше вікно запуску


Працював для мене без необхідності оновлювати всі сценарії з сервера Server 2008 до Server 2012 R2 для безлічі автоматизованих процесів для використання PowerShell. Для цього використовувався певний обліковий запис, тому мені справді довелося пройти через це, підписавши його на сервер.
Біткойн-вбивчий маніяк

11
Незважаючи на те, що це дозволяє позбутися помилки, необхідність вирішення проблеми за допомогою графічного інтерфейсу не є прийнятною відповіддю, враховуючи, що PowerShell призначений для використання як платформи автоматизації. Ця відповідь не буде працювати для всіх сценаріїв, наприклад, у сеансі віддаленого управління PowerShell.
Девон Діффенбах

2
За допомогою майстра першого запуску використовуйте об’єкт групової політики (GPO) : Конфігурація комп’ютера> Політики> Адміністративні шаблони> Компоненти Windows> Internet Explorer. Встановіть політику "Запобігання запуску майстра першого запуску" "Увімкнено та виберіть варіант, який вам підходить.
techie007

у мене була ця проблема з kubectly проксі, і це виправлено, коли я використовую curl. Дякую!
gpbaculio

Цей сценарій також не спрацює, якщо ваш додаток знаходиться в якійсь групі автоматичного масштабування, оскільки новий екземпляр, який запускається, вимагатиме цього щодня / щотижня / тощо. Найкраще використовувати -UseBasicParsing
Райан С.

10

Це впевнено, оскільки команда Invoke-WebRequest має залежність від збірок Internet Explorer і викликає її для синтаксичного аналізу результату відповідно до поведінки за замовчуванням. Як пропонує Метт, ви можете просто запустити IE і зробити свій вибір у підказці налаштувань, яка з’являється під час першого запуску. І помилка, яку ви зазнали, зникне.

Але це можливо лише в тому випадку, якщо ви запускаєте сценарії PowerShell як той самий користувач Windows, з яким ви запускали IE. Налаштування IE зберігаються у вашому поточному профілі Windows. Отже, якщо ви, як і я, запускаєте своє завдання в планувальнику на сервері як користувач СИСТЕМИ, це не спрацює.

Отже, тут вам доведеться змінити свої сценарії та додати аргумент -UseBasicParsing, як, наприклад, цей приклад: $WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing


7

Ви можете відключити необхідність запуску першої конфігурації запуску Internet Explorer, запустивши цей сценарій PowerShell, він налаштує відповідні властивості реєстру:

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

Після цього WebClient працюватиме без проблем


На жаль, це чудово працює лише у версіях графічного інтерфейсу, але не в Windows Server Core.
Лука

1
@Luke гаразд, я спробую знайти рішення для Windows Server Core
ujeenator

1

У мене також була ця проблема, і хоча -UseBasicParsing буде працювати для деяких, якщо вам насправді потрібно взаємодіяти з домом, це не буде працювати. Спробуйте скористатися груповою політикою, щоб зупинити появу вікна початкової конфігурації, і PowerShell більше не зупинить вас. Дивіться тут https://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

Після того, як я знайшов цю сторінку, у мене знадобилося кілька хвилин, після встановлення GP, PowerShell дозволить вам пройти.


1

У вашому веб-запиті на виклик просто використовуйте параметр -UseBasicParsing

наприклад, у вашому сценарії (рядок 2) ви повинні використовувати:

$rss = Invoke-WebRequest -UseBasicParsing

Згідно з документацією, цей параметр необхідний у системах, де IE не встановлено та не налаштовано.

Використовує об'єкт відповіді для вмісту HTML без аналізу об'єктної моделі документа (DOM). Цей параметр необхідний, коли Internet Explorer не інстальовано на комп'ютерах, наприклад під час встановлення Server Core операційної системи Windows Server.


0

Ще один спосіб вирішення: оновлення реєстру. У моєму випадку я не міг змінити GPO, а -UseBasicParsing порушує частини доступу до веб-сайту. Також у мене був користувач служби без дозволу на вхід, тому я не міг увійти як користувач і запустити графічний інтерфейс.
Виправити,

  1. увійдіть як звичайний користувач, запустіть IE setup.
  2. Потім експортуйте цей розділ реєстру: HKEY_USERS \ S-1-5-21 -.... \ SOFTWARE \ Microsoft \ Internet Explorer
  3. У збереженому файлі .reg замініть sid користувача на sid облікового запису служби
  4. Імпортуйте файл .reg

У файлі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.