प्रतिक्रिया सामग्री को पार्स नहीं किया जा सकता क्योंकि इंटरनेट एक्सप्लोरर इंजन उपलब्ध नहीं है, या


107

मुझे पॉवरशेल का उपयोग करके एक चैनल 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 
      } 
    }
    

    त्रुटि के साथ विफल:

    प्रतिक्रिया सामग्री को पार्स नहीं किया जा सकता क्योंकि इंटरनेट एक्सप्लोरर इंजन उपलब्ध नहीं है, या इंटरनेट एक्सप्लोरर का पहला-लॉन्च कॉन्फ़िगरेशन पूर्ण नहीं है। 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
निष्पक्षता में, एक त्रुटि संदेश में "इंटरनेट एक्सप्लोरर" शब्दों को देखना आसान है और बाकी संदेश को अनदेखा करें क्योंकि आप एक अंधा क्रोध में उड़ते हैं कि कमांड लाइन उपयोगिता का IE पर निर्भरता क्यों है।
मिस्टरज़िम्बु

जवाबों:


218

अपने इनवोक वेब अनुरोध में बस पैरामीटर का उपयोग करें -UseBasicParsing

उदाहरण के लिए आपकी स्क्रिप्ट (पंक्ति 2) का आपको उपयोग करना चाहिए:

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

प्रलेखन के अनुसार , यह पैरामीटर उन प्रणालियों पर आवश्यक है जहां IE स्थापित या कॉन्फ़िगर नहीं किया गया है:

दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) पार्सिंग के बिना HTML सामग्री के लिए प्रतिक्रिया ऑब्जेक्ट का उपयोग करता है। यह पैरामीटर आवश्यक है जब कंप्यूटर पर इंटरनेट एक्सप्लोरर स्थापित नहीं होता है, जैसे कि विंडोज सर्वर ऑपरेटिंग सिस्टम के सर्वर कोर इंस्टॉलेशन पर।


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/solve-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmblet/

त्रुटि शायद सामने आ रही है क्योंकि IE अभी तक पहली बार लॉन्च नहीं किया गया है, नीचे की खिड़की ला रहा है। इसे लॉन्च करें और उस स्क्रीन के माध्यम से प्राप्त करें, और फिर त्रुटि संदेश किसी भी अधिक नहीं आएगा। किसी भी स्क्रिप्ट को संशोधित करने की आवश्यकता नहीं है।

यानी पहले लॉन्च विंडो


PowerShell का उपयोग करने के लिए स्वचालित प्रक्रियाओं के एक समूह के लिए सर्वर 2008 सर्वर से सर्वर 2012 R2 तक सभी लिपियों को अपडेट किए बिना मेरे लिए काम किया। यह एक विशिष्ट खाते का उपयोग करता है इसलिए मुझे वास्तव में सर्वर पर हस्ताक्षरित उस खाते के माध्यम से इसे चलाना था।
बिटकॉइन मर्डरस मनिक

11
हालांकि यह त्रुटि से छुटकारा दिलाता है, GUI के माध्यम से समस्या को हल करने की आवश्यकता एक स्वीकार्य जवाब नहीं है, यह देखते हुए कि PowerShell का उपयोग एक स्वचालन मंच के रूप में किया जाना है। उदाहरण के लिए, PowerShell Remoting Session में यह उत्तर सभी परिदृश्यों के लिए काम नहीं करेगा।
Devon Dieffenbach

2
पहले रन विज़ार्ड को संभालने के लिए एक ग्रुप पॉलिसी ऑब्जेक्ट (GPO) का उपयोग करें : कंप्यूटर कॉन्फ़िगरेशन> नीतियां> प्रशासनिक टेम्पलेट> विंडोज घटक> इंटरनेट एक्सप्लोरर। "रनिंग फ़र्स्ट रन विजार्ड" नीति को सक्षम करने के लिए सेट करें और एक विकल्प चुनें जो आपको सूट करे।
Techie007

मैं kubectly प्रॉक्सी पर यह मुद्दा रहा था और जब मैं कर्ल का उपयोग करता हूं तो यह निश्चित होता है। धन्यवाद!
gpbaculio 22

यह परिदृश्य भी काम नहीं करेगा यदि आपके पास किसी प्रकार के ऑटो स्केलिंग समूह के अंदर आपका ऐप है, क्योंकि नए उदाहरण के रूप में इस दैनिक / साप्ताहिक / आदि की आवश्यकता होगी। का उपयोग करने के लिए सबसे अच्छा -UseBasicParsing
रयान सी

10

यह सुनिश्चित है क्योंकि Invoke-WebRequest कमांड की इंटरनेट एक्सप्लोरर असेंबली पर निर्भरता है और इसे डिफ़ॉल्ट व्यवहार के अनुसार परिणाम पार्स करने के लिए इसे आमंत्रित कर रहे हैं। जैसा कि मैट का सुझाव है, आप बस IE लॉन्च कर सकते हैं और सेटिंग में अपना चयन कर सकते हैं जो पहले लॉन्च पर पॉप अप कर रहा है। और आपके द्वारा अनुभव की गई त्रुटि गायब हो जाएगी।

लेकिन यह केवल तभी संभव है जब आप अपनी पॉवरशेल स्क्रिप्ट को उसी विंडो उपयोगकर्ता के रूप में चलाते हैं जिसके साथ आपने IE लॉन्च किया था। IE सेटिंग्स आपके वर्तमान विंडो प्रोफ़ाइल के तहत संग्रहीत की जाती हैं। इसलिए यदि आप, जैसे कि मैं एक सर्वर पर सिस्टम यूजर के रूप में एक शेड्यूलर में अपना काम चलाता हूं, तो यह काम नहीं करेगा।

तो यहाँ आपको अपनी स्क्रिप्ट बदलनी होगी और -UseBasicParsing तर्क जोड़ना होगा, जैसा कि इस उदाहरण के रूप में है: $WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing


7

आप इस PowerShell स्क्रिप्ट को चलाकर Internet Explorer के पहले लॉन्च कॉन्फ़िगरेशन को चलाने के लिए अक्षम कर सकते हैं, यह संबंधित रजिस्ट्री संपत्ति को समायोजित करेगा:

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

इसके बाद, WebClient समस्याओं के बिना काम करेगा


दुर्भाग्य से यह केवल जीयूआई संस्करणों पर ठीक काम करता है लेकिन विंडोज सर्वर कोर पर नहीं।
ल्यूक

1
@ ठीक है, मैं विंडोज सर्वर कोर के लिए समाधान खोजने का प्रयास
करूंगा

1

मेरे पास यह मुद्दा भी है, और जबकि -UseBasicParsing कुछ के लिए काम करेगा, अगर आपको वास्तव में डोम के साथ बातचीत करने की आवश्यकता नहीं है तो यह काम नहीं करेगा। प्रारंभिक कॉन्फ़िगरेशन विंडो को कभी भी प्रदर्शित होने से रोकने के लिए एक समूह नीति का उपयोग करने की कोशिश करें और पावरशेल आपको अब नहीं रोकेंगे। यहां देखें https://wahlnetwork.com/2015/11/17/solve-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/

जीपी सेट होने के बाद, मुझे यह पृष्ठ मिलते ही कुछ ही मिनटों के लिए ले लिया गया, एक बार जीपी सेट होने के बाद, पॉवरशेल आपको अनुमति देगा।


1

अपने आह्वान वेब अनुरोध में बस पैरामीटर का उपयोग करें -UseBasicParsing

उदाहरण के लिए आपकी स्क्रिप्ट (पंक्ति 2) का आपको उपयोग करना चाहिए:

$rss = Invoke-WebRequest -UseBasicParsing

प्रलेखन के अनुसार, यह पैरामीटर उन प्रणालियों पर आवश्यक है जहां IE स्थापित या कॉन्फ़िगर नहीं किया गया है।

दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) पार्सिंग के बिना HTML सामग्री के लिए प्रतिक्रिया ऑब्जेक्ट का उपयोग करता है। यह पैरामीटर आवश्यक है जब कंप्यूटर पर इंटरनेट एक्सप्लोरर स्थापित नहीं होता है, जैसे कि विंडोज सर्वर ऑपरेटिंग सिस्टम के सर्वर कोर इंस्टॉलेशन पर।


0

फिर भी हल करने के लिए एक और तरीका: रजिस्ट्री को अपडेट करना। मेरे मामले में मैं GPO को बदल नहीं सका, और -UseBasicParsing ने वेबसाइट तक पहुंच के कुछ हिस्सों को तोड़ दिया। इसके अलावा, मेरे पास लॉग इन अनुमतियों के बिना एक सेवा उपयोगकर्ता था, इसलिए मैं उपयोगकर्ता के रूप में लॉग इन नहीं कर सका और जीयूआई नहीं चला सका।
तै होना,

  1. एक सामान्य उपयोगकर्ता के रूप में लॉग इन करें, IE सेटअप चलाएँ।
  2. फिर इस रजिस्ट्री कुंजी को निर्यात करें: HKEY_USERS \ S-1-5-21 -.... \ SOFTWARE \ Microsoft \ Internet Explorer
  3. सहेजी गई .reg फ़ाइल में, उपयोगकर्ता खाते को सेवा खाते के साथ बदलें
  4. .Reg फ़ाइल आयात करें

फ़ाइल में

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.