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