簡體   English   中英

在Azure VM上使用Powershell不穩定文件下載

[英]Choppy File Download using Powershell on Azure VM

使用Invoke-WebRequest命令下載文件時,我注意到Azure虛擬機上有一些奇怪的行為。 好像下載流超級震撼。 通常,Azure VM超級快地下載文件,所以不確定是什么原因造成的。 該文件位於與VM相同區域的Azure Blob存儲中。 當我通過網絡瀏覽器下載文件時,只需要3秒鍾。 使用Powershell大約需要一分鍾! 在此處輸入圖片說明

這是使用powershell完成后的網絡屏幕截圖。

為了澄清,這是我用來下載文件的代碼...

$dest = "$($buildDir)\MyStuff.zip"
Invoke-WebRequest "https://mystorage.blob.core.windows.net/apps/$($using:buildNumber)/App/MyStuff.zip" -OutFile $dest

我正在使用azure畫廊中2016-Datacenter映像上隨附的任何版本的Powershell。

是的,PowerShell cmdlet Invoke-WebRequest下載文件的速度比Web瀏覽器慢,因為報告每個字節的進度都比其他人(Web瀏覽器)高。

有關Invoke-WebRequest速度的更多信息,請參考@jasongin答案

如果您想通過PowerShell下載文件,也許我們可以使用WebClient Class ,它比WebRequest Class快,我們可以使用如下命令:

$download = New-Object net.webclient  
$download.Downloadfile($source_url, $local_url)

希望這可以幫助。

您不會顯示有關如何使用Invoke-WebRequest或使用32位還是64位的代碼。

來自類似的帖子,答案是...

“問題在於,他正在將COM對象傳遞到另一個cmdlet中(在本例中為Select-Object。),發生這種情況時,我們嘗試按屬性名稱綁定參數。枚舉COM對象的屬性名稱的速度非常慢,因此我們花了很多錢。我們有86%的時間在兩個非常基本的CLR API調用上:

(…)//從COM類型typeinfo.GetFuncDesc(index,out pFuncDesc);獲取函數描述 (…)//從COM函數描述中獲取函數名稱typeinfo.GetDocumentation(funcdesc.memid,out strName,out strDoc,out id,out strHelp); (......)

我們也許可以通過緩存在這里做一些聰明的事情。

一種解決方法是不通過管道傳遞到Select-Object,而是使用語言功能:抓住表中的行,跳過第一行(列標題)

$allRows = @($slotTable.getElementsByTagName("tr"))
$rows = $allRows[1..$allRows.Count]

為什么此PowerShell代碼(Invoke-WebRequest / getElementsByTagName)在我的計算機上如此緩慢,而在其他計算機上卻如此緩慢?

但總體而言,5.1及以下版本中的Invoke-WebRequest速度較慢。 在PoSHv6(Core)中,速度更快。 嘗試是自己的,看看。

在線上有幾篇文章專門討論Invoke-WebRequest的速度有多慢。

與Windows版本相比,Invoke-WebRequest速度似乎較慢,但不是https://github.com/PowerShell/PowerShell/issues/5284 https://github.com/PowerShell/PowerShell/issues/2656 https://www.chasewright .COM /調用-的WebRequest-VS-系統凈Web客戶端下載速度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM