[英]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.