सवाल विंडोज पावरशेल में wget करने के लिए मूल विकल्प?


मुझे पता है कि मैं उपरोक्त पुस्तकालय (विंडोज़ के लिए wget) डाउनलोड और स्थापित कर सकता हूं, लेकिन मेरा सवाल यह है:

विंडोज पावरशेल में, क्या कोई मूल विकल्प है wget?

मुझे जरूरत है wget HTTP GET के साथ किसी दिए गए यूआरएल से फ़ाइल को पुनः प्राप्त करने के लिए। उदाहरण के लिए:

wget http://www.google.com/

253
2017-11-28 09:56


मूल


यह भी देखें superuser.com/questions/25538/... - jiggunjer


जवाब:


यहां एक साधारण पीएस 3.0 और बाद में एक-लाइनर है जो काम करता है और इसमें बहुत अधिक पीएस बारफ शामिल नहीं है:

wget http://blog.stackexchange.com/ -OutFile out.html

ध्यान दें कि:

  • wget के लिए एक उपनाम है Invoke-WebRequest
  • Invoke-WebRequest एक देता है HtmlWebResponseObject, जिसमें लिंक, छवियां, फॉर्म, इनपुटफिल्ड्स इत्यादि जैसे बहुत उपयोगी HTML पार्सिंग गुण शामिल हैं, लेकिन इस मामले में हम केवल कच्ची सामग्री का उपयोग कर रहे हैं
  • फ़ाइल सामग्री को डिस्क पर लिखने से पहले स्मृति में संग्रहीत किया जाता है, जिससे यह दृष्टिकोण बड़ी फ़ाइलों को डाउनलोड करने के लिए अनुपयुक्त बना देता है
  • विंडोज सर्वर कोर इंस्टॉलेशन पर, आपको इसे लिखना होगा

    wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html
    
  • 20 सितंबर 2014 से पहले, मैंने सुझाव दिया

    (wget http://blog.stackexchange.com/).Content >out.html
    

    एक जवाब के रूप में। हालांकि, यह सभी मामलों में काम नहीं करता है, जैसा कि > ऑपरेटर (जो एक उपनाम है Out-File) इनपुट को यूनिकोड में परिवर्तित करता है।

यदि आप विंडोज 7 का उपयोग कर रहे हैं, तो आपको विंडोज 4 प्रबंधन फ्रेमवर्क के संस्करण 4 या नए स्थापित करने की आवश्यकता होगी।

आप पाते हैं कि एक कर रहा है $ProgressPreference = "silentlyContinue" से पहले Invoke-WebRequest बड़े फाइलों के साथ डाउनलोड गति में काफी सुधार होगा; यह चर नियंत्रण करता है कि प्रगति यूआई प्रदान की जाती है या नहीं।


207
2017-12-26 06:47



यह अब सही जवाब है, और अगर मैं वास्तविक wget स्थापित किया गया था तो मैं गलती से परीक्षण में भाग गया। परेशान है कि यह आसानी से फ़ाइल नाम नहीं प्राप्त कर सकता है (आपको आउटपुट रीडायरेक्शन में इसे निर्दिष्ट करना होगा), लेकिन इस विकल्प में असली wget (मेरी राय में) से बेहतर यूआई है तो ऐसा ही है। - Matthew Scharley
परंतु विंडोज 7 केवल PowerShell 2.0 के साथ आता है, और नतीजा होगा "शब्द 'Invoke-WebRequest' को cmdlet के नाम के रूप में पहचाना नहीं गया है ..."। - Peter Mortensen
उचित चेतावनी: यह विधि फ़ाइल की पूरी सामग्री फ़ाइल में लिखने से पहले स्मृति में रखेगी। यह बड़ी फ़ाइलों को डाउनलोड करने के लिए एक अच्छा समाधान नहीं है। - im_nullable
@im_nullable, अच्छी कॉल - मैंने इसे पोस्ट में जोड़ा है। - Warren Rumak
@dezza मैंने जवाब को एक अलग दृष्टिकोण के साथ अद्यतन किया है। दुबारा कोशिश कीजिये। - Warren Rumak


यदि आपको बस एक फ़ाइल पुनर्प्राप्त करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं डाउनलोड फाइल की विधि WebClient वस्तु:

$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)

कहा पे $url एक स्ट्रिंग है जो फ़ाइल के यूआरएल का प्रतिनिधित्व करती है, और $path स्थानीय पथ का प्रतिनिधित्व कर रहा है फ़ाइल को सहेजा जाएगा।

ध्यान दें कि $path फ़ाइल नाम शामिल होना चाहिए; यह सिर्फ एक निर्देशिका नहीं हो सकता है।


175
2017-11-28 10:20



अब तक यह प्रस्तावित सबसे अच्छा समाधान रहा है। यह भी दिया गया है कि ऐसा लगता है कि मैं इसे एक लाइन प्रारूप में फिर से लिख सकता हूं (new-object System.Net.WebClient).DownloadFile( '$url, $path) यह के लिए सबसे अच्छा पत्राचार है wget मैंने अभी तक देखा है। धन्यवाद! - jsalonen
एक साइड-नोट के रूप में आप इसे कुछ नया (ऑब्जेक्ट सिस्टम.Net.WebClient) का उपयोग करके असीमित रूप से भी कर सकते हैं। डाउनलोडफाइलएसिंक (यूआरएल, फाइलपाथ) - James
क्या हम वेबक्लिएंट के माध्यम से और नोटपैड के बाहर एक विशेष पाठ प्राप्त कर सकते हैं? धन्यवाद - Mowgli
हां, यह विंडोज 7 पर बॉक्स से बाहर काम करता है (जो PowerShell 2.0 के साथ आता है)। नमूना: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html") - Peter Mortensen
केवल यूआरएल प्राप्त करने और परिणामों को अनदेखा करने के लिए (उदा।, आईआईएस वार्मअप स्क्रिप्ट का हिस्सा) डाउनलोडडेटा का उपयोग करें: (new-object System.Net.WebClient).DownloadData($url) | Out-Null - BurnsBA


वहाँ है Invoke-WebRequest आने वाले पावरशेल संस्करण 3 में:

Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html

81
2017-08-10 23:38



सभी लालित्य dd... - gWaldo
@gWaldo आप मजाक कर रहे हैं- यह उपयोग करने में खुशी है (किसी को सिर्फ पीएस सीखने के रूप में बोलना) - Jack Douglas
मेरा मतलब है कि -Outfile जब आप बस उपयोग कर सकते हैं तो पैरामीटर अपरिहार्य लगता है > (ओवरराइट करने के लिए) या >> (संलग्न करने के लिए) एक फ़ाइल में। - gWaldo
@gWaldo या यूआरएल से फाइलनाम को भी पसंद करें wget कर देता है :) - Peltier
और पीएस 4.0 के रूप में, wget तथा curl के लिए aliasted हैं Invoke-WebRequest(iwr) डिफ़ॉल्ट रूप से: डी - Bob


यह थोड़ा गन्दा है लेकिन वहाँ है यह ब्लॉग पोस्ट जो आपको फ़ाइलों को डाउनलोड करने के लिए निर्देश देता है।

वैकल्पिक रूप से (और यह वह है जिसे मैं अनुशंसा करता हूं) आप बीआईटीएस का उपयोग कर सकते हैं:

Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"

यह प्रगति दिखाएगा और फ़ाइल को वर्तमान निर्देशिका में डाउनलोड करेगा।


16
2017-11-28 10:18



बीआईटीएस सर्वर के अंत में समर्थन पर निर्भर करता है, अगर उपलब्ध है तो यह पृष्ठभूमि में काम करता है और आप अन्य cmdlets के साथ प्रगति अद्यतन प्राप्त कर सकते हैं। - Richard
मैंने लाने की कोशिश की Google.com, लेकिन मुझे मिल गया है Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))। मैं परेशान हूँ: | - jsalonen
@jsalonen मुझे लगता है कि बीआईटीएस केवल पृष्ठों की बजाय फाइलें डाउनलोड करेगा। रिचर्ड का कहना है कि यह कुछ सर्वर साइड सपोर्ट पर निर्भर करता है (हालांकि मुझे नहीं लगता कि यह माइक्रोसॉफ्ट विशिष्ट है)। - Matthew Steeples
मैं देखता हूं और मुझे लगता है कि मुझे बीआईटीएस का उपयोग करने में बात मिलती है, हालांकि, मैं इसे यहां नहीं ढूंढ रहा हूं। - jsalonen
मुझे वह याद रखना होगा। धन्यवाद! - flickerfly


पावरशेल वी 4 वन-लाइनर:

(iwr http://blog.stackexchange.com/).Content >index.html`

या

(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4

यह मूल रूप से है वॉरेन (भयानक) वी 3 वन-लाइनर  (इसके लिए धन्यवाद!) - इसे एक वी 4 पावरशेल में काम करने के लिए बस एक छोटे से बदलाव के साथ।

वॉरेन का एक लाइनर - जो बस उपयोग करता है wget बजाय iwr - अभी भी काम करना चाहिए वी 3 (कम से कम, मुझे लगता है, हालांकि इसका परीक्षण नहीं किया था)। वैसे भी। लेकिन जब इसे ए में निष्पादित करने का प्रयास किया जाता है V4 पावरशेल (जैसा कि मैंने कोशिश की), आप पावरशेल को हल करने में विफल रहे देखेंगे wget एक मान्य cmdlet / कार्यक्रम के रूप में।

रुचि रखने वालों के लिए, जैसा कि मैंने उठाया है बॉब की टिप्पणी प्रतिउत्तर में स्वीकृत उत्तर  (धन्यवाद दोस्त!) - इसलिये पावरशेल वी 4 के रूप में, wget तथा curl के लिए aliased हैं Invoke-WebRequest, करने के लिए सेट iwr डिफ़ॉल्ट रूप से। इस प्रकार, wgetहल नहीं किया जा सकता है (साथ ही साथ curl यहां काम नहीं कर सकता)


6
2018-05-25 10:22





यहां एक PowerShell फ़ंक्शन है जो फ़ाइल डाउनलोड करने से पहले छोटे यूआरएल को हल करता है

function Get-FileFromUri {  
    param(  
        [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [string]
        [Alias('Uri')]
        $Url,
        [parameter(Mandatory=$false, Position=1)]
        [string]
        [Alias('Folder')]
        $FolderPath
    )
    process {
        try {
            # resolve short URLs
            $req = [System.Net.HttpWebRequest]::Create($Url)
            $req.Method = "HEAD"
            $response = $req.GetResponse()
            $fUri = $response.ResponseUri
            $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
            $response.Close()
            # download file
            $destination = (Get-Item -Path ".\" -Verbose).FullName
            if ($FolderPath) { $destination = $FolderPath }
            if ($destination.EndsWith('\')) {
                $destination += $filename
            } else {
                $destination += '\' + $filename
            }
            $webclient = New-Object System.Net.webclient
            $webclient.downloadfile($fUri.AbsoluteUri, $destination)
            write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
        } catch {
            write-host -ForegroundColor DarkRed $_.Exception.Message
        }  
    }  
}  

वर्तमान फ़ोल्डर में फ़ाइल डाउनलोड करने के लिए इसे इस तरह प्रयोग करें:

Get-FileFromUri http://example.com/url/of/example/file  

या एक निर्दिष्ट फ़ोल्डर में फ़ाइल डाउनलोड करने के लिए:

Get-FileFromUri http://example.com/url/of/example/file  C:\example-folder  

4
2017-08-12 10:48





निम्नलिखित फ़ंक्शन को एक यूआरएल मिलेगा।

function Get-URLContent ($url, $path) {
  if (!$path) {
      $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
  }
  $wc = New-Object Net.WebClient
  $wc.UseDefaultCredentials = $true
  $wc.Proxy.Credentials = $wc.Credentials
  $wc.DownloadFile($url, $path)
}

कुछ टिप्पणियां:

  1. अंतिम 4 लाइनों की आवश्यकता केवल तभी होती है जब आप प्रमाणीकरण प्रॉक्सी के पीछे हों। सरल उपयोग के लिए, (New-Object Net.WebClient).DownloadFile($url, $path) ठीक काम करता है।
  2. राह जरूर पूर्ण हो, क्योंकि डाउनलोड आपकी वर्तमान निर्देशिका में नहीं किया गया है, इसलिए रिश्तेदार पथों के परिणामस्वरूप डाउनलोड कहीं खो जायेगा।
  3. if (!$path) {...} अनुभाग सरल मामला संभालता है जहां आप यूआरएल में दिए गए नाम का उपयोग कर फ़ाइल को वर्तमान निर्देशिका में डाउनलोड करना चाहते हैं।

2
2017-12-15 15:26





Windows 10 बैश खोल का उपयोग करें जिसमें विंडोज सुविधा सेट होने के बाद wget शामिल है।

विंडोज़ पर उबंटू बैश खोल कैसे स्थापित करें:

यूट्यूब: विंडोज पर उबंटू पर बैश चल रहा है!

लिनक्स दस्तावेज़ीकरण के लिए विंडोज सबसिस्टम


1
2017-09-27 03:21



लिंक के मरने के मामले में आप जो कहते हैं उसका समर्थन करने के लिए इस उत्तर के कुछ उद्धृत संदर्भ को जोड़ने पर विचार करें ताकि उत्तर सामग्री अभी भी उपलब्ध हो जो वर्तमान में केवल आपके सुझाव के अनुसार उस लिंक के माध्यम से उपलब्ध हो। - Pimp Juice IT