වින්ඩෝස් පවර්ෂෙල් හි wget සඳහා ස්වදේශීය විකල්පය?


299

සහතික කළ පුස්තකාලය (වින්ඩෝස් සඳහා wget) බාගත කර ස්ථාපනය කළ හැකි බව මම දනිමි, නමුත් මගේ ප්‍රශ්නය මෙයයි:

වින්ඩෝස් පවර්ෂෙල් හි ස්වදේශීය විකල්පයක් wgetතිබේද?

wgetHTTP GET සමඟ දී ඇති URL එකකින් ගොනුවක් ලබා ගැනීමට මට අවශ්‍යය . උදාහරණයක් වශයෙන්:

wget http://www.google.com/

මෙයද බලන්න superuser.com/questions/25538/...
jiggunjer

Answers:


251

මෙන්න සරල PS 3.0 සහ පසුව එක් ලයිනර් වැඩ කරන අතර බොහෝ PS බාර්ෆ් සම්බන්ධ නොවේ:

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

එය සටහන් කර ගන්න:

  • wget සඳහා අන්වර්ථයකි Invoke-WebRequest
  • Invoke-WebRequest විසින් HtmlWebResponseObject එකක් ලබා දෙයි , එහි සබැඳි, රූප, පෝරම, ආදාන ක්ෂේත්‍ර යනාදිය වැනි ප්‍රයෝජනවත් HTML විග්‍රහ කිරීමේ ගුණාංග අඩංගු වේ, නමුත් මේ අවස්ථාවේ දී අපි භාවිතා කරන්නේ අමු අන්තර්ගතය පමණි
  • ලිපිගොනු අන්තර්ගතය තැටියට ලිවීමට පෙර මතකයේ ගබඩා කර ඇති අතර විශාල ගොනු බාගත කිරීම සඳහා මෙම ප්‍රවේශය නුසුදුසුය
  • වින්ඩෝස් සර්වර් කෝර් ස්ථාපනයන්හිදී, ඔබට මෙය ලිවීමට අවශ්‍ය වේ

    wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html
    
  • 2014 සැප්තැම්බර් 20 ට පෙර මම යෝජනා කළෙමි

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

    පිළිතුරක් ලෙස. කෙසේ වෙතත්, මෙය සෑම අවස්ථාවකම ක්‍රියා නොකරයි, මන්ද >ක්‍රියාකරු (එය අන්වර්ථයකි Out-File) ආදානය යුනිකෝඩ් බවට පරිවර්තනය කරයි.

ඔබ වින්ඩෝස් 7 භාවිතා කරන්නේ නම්, ඔබට 4 වන අනුවාදය හෝ වින්ඩෝස් කළමනාකරණ රාමුවේ නවතම ස්ථාපනය කිරීමට අවශ්‍ය වනු ඇත.

$ProgressPreference = "silentlyContinue"පෙර Invoke-WebRequestසිදු කිරීමෙන් විශාල ලිපිගොනු සමඟ බාගත කිරීමේ වේගය සැලකිය යුතු ලෙස වැඩිදියුණු වන බව ඔබට පෙනී යනු ඇත; මෙම විචල්‍යය මඟින් ප්‍රගතිය UI විදහා දක්වයිද යන්න පාලනය කරයි.


4
මෙය දැන් නිවැරදි පිළිතුර වන අතර, සත්‍ය wget ස්ථාපනය කර ඇත්දැයි මම අහම්බෙන් පරීක්‍ෂාවට ලක් කළෙමි. එයට පහසුවෙන් ගොනු නාමය ලබා ගත නොහැකි වීම ගැන කරදර වීම (ඔබ එය ප්‍රතිදාන යළි හරවා යැවීමේදී සඳහන් කළ යුතුය), නමුත් මෙම විකල්පය සැබෑ wget වලට වඩා හොඳ UI එකක් ඇත (මගේ මතය අනුව) එබැවින් එය තිබේ.
මැතිව් ෂාර්ලි

13
නමුත් වින්ඩෝස් 7 පැමිණෙන්නේ පවර්ෂෙල් 2.0 සමඟ පමණක් වන අතර එහි ප්‍රති result ලය වනුයේ “ඉන්වොක්-වෙබ් රෙක්ස්ට්” යන පදය සෙන්ටිමීටරයක නම ලෙස හඳුනාගෙන නොමැත, ... ”.
පීටර් මෝර්ටෙන්සන්

17
සාධාරණ අනතුරු ඇඟවීම: මෙම ක්‍රමය මඟින් ගොනුවට ලිවීමට පෙර එහි සම්පූර්ණ අන්තර්ගතය මතකයේ රැඳෙනු ඇත. විශාල ගොනු බාගත කිරීම සඳහා මෙය හොඳ විසඳුමක් නොවේ.
im_nullable

2
_im_nullable, හොඳ ඇමතුමක් - මම එය තනතුරට එකතු කර ඇත්තෙමි.
වොරන් රූමාක්

1
@dezza මම වෙනස් ප්‍රවේශයකින් පිළිතුර යාවත්කාලීන කර ඇත්තෙමි. නැවත උත්සාහ කරන්න.
වොරන් රූමාක්

186

ඔබට ගොනුවක් ලබා ගැනීමට අවශ්‍ය නම්, ඔබට WebClient වස්තුවෙහි DownloadFile ක්‍රමය භාවිතා කළ හැකිය :

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

$urlගොනුවේ URL නිරූපණය කරන නූලක් කොතැනද , සහ $pathගොනුව සුරකින දේශීය මාර්ගය නියෝජනය කරයි.

$pathගොනුවේ නම ඇතුළත් විය යුතු බව සලකන්න ; එය නාමාවලියක් විය නොහැක.


33
මෙතෙක් යෝජනා කර ඇති හොඳම විසඳුම මෙයයි. මෙතෙක් මා දැක (new-object System.Net.WebClient).DownloadFile( '$url, $path)ඇති හොඳම ලිපි හුවමාරුව එය බැවින් මට එය එක් පේළි ආකෘතියකින් නැවත ලිවිය හැකි බව පෙනේ wget. ස්තූතියි!
jsalonen

3
පැති සටහනක් ලෙස ඔබට මෙය (අළුත්-වස්තු System.Net.WebClient) වැනි දෙයක් භාවිතා කර සමමුහුර්තව කළ හැකිය .DownloadFileAsync (url, filePath)
ජේම්ස්

6
ඔව්, මෙය වින්ඩෝස් 7 හි ඇති කොටුවෙන් පිටත ක්‍රියාත්මක වේ ( එය පවර්ෂෙල් 2.0 සමඟ පැමිණේ ). නියැදිය: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
පීටර් මෝර්ටෙන්සන්

4
යූආර්එල් එකක් ලබා ගැනීම සහ (new-object System.Net.WebClient).DownloadData($url) | Out-Null
ප්‍රති results ල

1
දෝෂ පණිවිඩ ඉතා ප්‍රයෝජනවත් නොවේ; නම් $pathනාමාවලියක් හෝ පවතින ගොනු වන අතර, එය Generic බලපත්රය යටතේ අවසර ලබා ඇත ව්යතිරේක වීසි කරනවා. අහ්, මයික්‍රොසොෆ්ට්.
BaseZen

90

නැත Invoke-WebRequestඑළඹෙන PowerShell වන අනුවාදය සහ 3 වන අනුවාදය දී:

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

9
සියළුම අලංකාරය dd...
gWaldo

1
WgWaldo ඔබ විහිළු කරයි - මෙය භාවිතා කිරීම සතුටකි (PS ඉගෙන ගන්නා කෙනෙකු ලෙස කථා කිරීම)

8
මම අදහස් කළේ -Outfileඔබට ගොනුවකට ( >නැවත ලිවීමට) හෝ >>(එකතු කිරීමට) භාවිතා කළ හැකි විට පරාමිතිය බාහිර බවක් පෙනේ .
gWaldo

5
WgWaldo හෝ URL වෙතින් ගොනු නාමය අඩු කරන්න. wget:)
Peltier

5
හා ප්රාදේශීය සභා 4.0 වන විට, wgetසහ curlකිරීමට aliasted ඇත Invoke-WebRequest( iwrඩී: පෙරනිමියෙන්)
බොබ්

18

එය ටිකක් අවුල් සහගත නමුත් ලිපිගොනු බාගත කිරීම සඳහා උපදෙස් ලබා දෙන මෙම බ්ලොග් සටහන ඇත.

විකල්පයක් ලෙස (මෙය මම නිර්දේශ කරන එකකි) ඔබට බිට්ස් භාවිතා කළ හැකිය:

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

එය ප්‍රගතිය පෙන්වන අතර ගොනුව වත්මන් නාමාවලියට බාගත කරනු ඇත.


3
BITS සේවාදායකයේ සහාය මත රඳා පවතී, තිබේ නම් මෙය පසුබිමේ ක්‍රියාත්මක වන අතර ඔබට වෙනත් cmdlets සමඟ ප්‍රගති යාවත්කාලීන කිරීම් ලබා ගත හැකිය.
රිචඩ්

2
මම google.com ලබා ගැනීමට උත්සාහ කළෙමි , නමුත් මට ලැබෙන්නේ එපමණකිStart-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) . මට ප්‍රහේලිකාවක්: |
jsalonen

1
sjsalonen මම හිතන්නේ බිට්ස් බාගත කරන්නේ පිටු වලට වඩා ගොනු පමණක් බවයි. රිචඩ් පවසන පරිදි එය සමහර සේවාදායක පාර්ශවීය සහාය මත රඳා පවතී (එය මයික්‍රොසොෆ්ට් විශේෂිත යැයි මම නොසිතුවත්).
මැතිව් ස්ටීපල්ස්

මම දකින අතර මම සිතන්නේ මට බිට්ස් භාවිතා කිරීමේ තේරුම ලැබෙනු ඇති බවයි, කෙසේ වෙතත්, මම මෙහි සොයන දේ එය නොවේ.
jsalonen

6

පවර්ෂෙල් වී 4 වන්-ලයිනර්:

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

හෝ

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

මෙය මූලික වශයෙන් වොරන්ගේ (නියමයි) V3 වන්-ලයිනර් ය (මේ සඳහා ස්තූතියි!) - එය V4 පවර්ෂෙල් එකක වැඩ කිරීම සඳහා ඉතා සුළු වෙනසක් සහිතව.

වොරන් එක්-ලයිනර් හුදෙක් යොදා ගන්නා - wgetවඩා iwr- තවමත් වැඩ කළ යුතු V3 (අවම වශයෙන් මම හිතන්නේ, නමුත්, එය පරීක්ෂා කළේ නැහැ.) කෙසේ හෝ වේවා. නමුත් එය V4 පවර්ෂෙල් එකකින් ක්‍රියාත්මක කිරීමට උත්සාහ කරන විට (මා උත්සාහ කළ පරිදි), wgetවලංගු cmdlet / program ලෙස විසඳීමට පවර්ෂෙල් අසමත් වන බව ඔබට පෙනෙනු ඇත.

උනන්දුවක් දක්වන අය සඳහා, එනම් - මම පිළිගත් පිළිතුරට පිළිතුරු වශයෙන් බොබ්ගේ අදහස් දැක්වීමෙන් (ස්තූතියි, මිනිසා!) - පවර්ෂෙල් වී 4 නිසා , සහ පෙරනිමියෙන් සකසා ඇති අන්වර්ථ නාමයන් නිසා . මේ අනුව, විසඳිය නොහැක (එසේම මෙහි වැඩ කළ නොහැක) . wgetcurlInvoke-WebRequestiwrwgetcurl


4

ගොනුව බාගත කිරීමට පෙර කෙටි URL නිරාකරණය කරන පවර්ෂෙල් ශ්‍රිතයක් මෙන්න

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  

2

පහත ශ්‍රිතයට URL එකක් ලැබෙනු ඇත.

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) {...}URL හි දක්වා ඇති නම භාවිතා කරමින් ගොනුව වත්මන් නාමාවලියට බාගත කිරීමට අවශ්‍ය සරල අවස්ථාව මෙම අංශය විසින් හසුරුවනු ලැබේ.

1

වින්ඩෝස් විශේෂාංගය සැකසූ පසු wget ඇතුළත් වින්ඩෝස් 10 බාෂ් ෂෙල් භාවිතා කරන්න.

වින්ඩෝස් හි උබුන්ටු බාෂ් ෂෙල් ස්ථාපනය කරන්නේ කෙසේද:

යූ ටියුබ්: වින්ඩෝස් හි උබුන්ටු මත බාෂ් ධාවනය කිරීම!

ලිනක්ස් ප්‍රලේඛනය සඳහා වින්ඩෝස් උප පද්ධතිය


1
සබැඳිය කවදා හෝ මිය ගියහොත් ඔබ සඳහන් කරන දෙයට සහය දක්වන මෙම පිළිතුරට උපුටා දැක්වීම් කිහිපයක් එකතු කිරීම සලකා බලන්න, එවිට පිළිතුරු අන්තර්ගතය තවමත් පවතින අතර එය ඔබගේ යෝජනාවට අනුව එම සබැඳිය හරහා පමණක් දැනට පවතී.
පිම්ප් යුෂ IT

0

ඔබේ වින්ඩෝස් ප්‍රමාණවත් තරම් අලුත් නම් (1809 අනුවාදය හෝ නව වැනි), “සැබෑ” කරකැවීමක් තිබේ. curl හට විධාන රේඛා විකල්පය "-O" ඇත (ලොකු අකුර O; කුඩා අකුර එයම නොකරනු ඇත!) "-O" විකල්පය විකල්පයක් ලෙස "--remote-name" curl ට කියයි, සුරකින ලද ගොනුවට ලැබෙනු ඇත URL හි ගොනු-නම කොටස ලෙස එකම නම.

යමෙකුට මෙය "curl.exe" ලෙස ආරම්භ කළ යුතුය, එය "Invoke-WebRequest" සඳහා අන්වර්ථ "curl" වෙතින් වටහා ගත හැකිය. අහඹු ලෙස එය cmd.exe හි වෙනස්කම් නොමැතිව ක්‍රියා කරයි.

මෙහි වෙනත් පිළිතුරක දී මෙන් එකම උදාහරණය භාවිතා කිරීම

curl.exe -O http://demo.mediacore.tv/files/31266.mp4

(වෙබ් අඩවිය මට මෙය විවරණයක් ලෙස එක් කිරීමට ඉඩ නොදේ, පෙනෙන හැටියට ඒ සඳහා මට තවත් “කීර්තියක්” අවශ්‍ය වේ - එබැවින් එයට නව පිළිතුරක් ලැබේ)


0

-Outfile පරාමිතිය සමඟ Invoke-WebRequest නූලක් අපේක්ෂා කරයි, එබැවින් ඔබේ ගොනු නාමය අංකයකින් ආරම්භ වී උපුටා දැක්වීම් සමඟ සම්බන්ධ නොවන්නේ නම්, ප්‍රතිදාන ගොනුවක් සාදනු නොලැබේ.

උදා. Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"

මෙය අකුරකින් ආරම්භ වන ගොනු නාමයන්ට බලපාන්නේ නැත.


මෙම විසඳුම වෙනත් පිළිතුරු වල සඳහන් වේ ( wgetඅන්වර්ථයකි Invoke-WebRequest, සහ ඉහත
දෙයට

පිළිතුරේ කාරණය වූයේ සටහන අවධාරණය කිරීමයි. සින්ටැක්ස් දෝෂය හේතුවෙන් කිසිදු පිළිතුරක් ගොනුවක් නිර්මාණය නොකෙරේ.
සිම්බා

එය සැබවින්ම අනෙක් පිළිතුර පිළිබඳ අදහස් දැක්වීමක් විය යුතුය
බර්ටිබ්

මෙම පිළිතුර වෙනත් පිළිතුරු වලින් හෝ ඉහත පිළිතුරට සමාන නොවේ.
සිම්බා

-1

බ්‍රව්සරයේ ආරම්භක දේවල් කිසිවක් සොයා ගැනීමට මෙය ඔබට වැඩ කළ යුතුය. "-UseBasicParsing" පරාමිතිය සටහන් කරන්න.

Invoke-WebRequest http://localhost -UseBasicParsing

1
(1) “බ්‍රව්සරය ආරම්භ නොකළ දේවල්” යනු කුමක්ද? (2) පිළිගත් පිළිතුර දැනටමත් සඳහන් කර ඇති බව සලකන්න -UseBasicParsing.
ස්කොට්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.