2015-02-23 65 views
19

我使用Powershell的Invoke-WebRequest方法將文件從Amazon S3下載到我的Windows EC2實例。Powershell - 爲什麼使用調用WebRequest比瀏覽器下載慢得多?

如果我使用Chrome下載文件,我可以在5秒內下載200 MB文件。使用Invoke-WebRequest的PowerShell中的相同下載最多需要5分鐘。

爲什麼使用Invoke-WebRequest的速度較慢,有沒有辦法在PowerShell腳本中全速下載?

+0

是否將IE配置爲使用Chrome不在您的系統上的代理? – alroc 2015-02-23 20:44:20

+0

@alroc文件在IE中以與Chrome相同的速度下載。它只會減慢使用'Invoke-WebRequest' – 2015-02-23 20:51:13

+0

請顯示您的代碼。在PowerShell中進行下載時,您看到了什麼樣的內存利用率? – alroc 2015-02-23 20:51:45

回答

16

我用

Invoke-WebRequest $video_url -OutFile $local_video_url 

我改變了上面

$wc = New-Object net.webclient 
$wc.Downloadfile($video_url, $local_video_url) 

這恢復了下載速度是我在我的瀏覽器中看到。

0

我會假設爲什麼Invoke-WebRequest比較慢的原因是它對所請求的頁面進行刮取式分析,而.NET Web客戶端只是發出get請求並保存響應。 Invoke-WebRequest解析內容,ParsedHtml,Forms,InputFields,鏈接,圖像,腳本,AllElements,BaseResponse和StatusCode屬性。

很不錯article用Invoke-WebRequest進行搜索。

1

我今天剛剛遇到這個問題,如果您將ContentType參數更改爲application/octet-stream它會快得多(與使用webclient一樣快)。原因是因爲Invoke-Request命令不會嘗試將響應解析爲JSON或XML。

Invoke-RestMethod -ContentType "application/octet-stream" -Uri $video_url -OutFile $local_video_url 
+0

'-ContentType'僅用於'POST'請求​​AFAIK,所以它可能不會有所作爲。 – rednoah 2016-11-02 19:30:49

14

沒有切換離開Invoke-WebRequest,關閉進度條爲我做了。我發現從這個線程的答案:https://github.com/PowerShell/PowerShell/issues/2138(jasongin於2016年10月3日評論)

$ProgressPreference = 'SilentlyContinue' 
Invoke-WebRequest <params> 

對於本地主機上我的5MB文件,下載時間從30多歲就到250毫秒。

請注意,要使進度條回到活動外殼中,您需要致電$ProgressPreference = 'Continue'

+1

這對我們也有很大的影響(對於10-30MB的文件,幾十秒鐘到不到一秒) - 我總是懷疑是進度顯示放慢了速度,但不知道如何阻止它它。 – 2017-12-16 12:20:02

相關問題