繁体   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