在Azure VM上使用Powershell下载Choppy文件

时间:2018-01-08 21:18:16

标签: powershell azure azure-virtual-machine

我在使用 fetch("http://localhost:8001/api/login", { method: 'post', headers: { "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" }, body: 'username=' + this.state.username + '&password=' + this.state.password }) .then(function (responseObject) { console.log('Request succeeded with Response object', responseObject); }) .then(function (result){ console.log(result); }) .catch(function (error) { console.log('Request failed', error); }); }else{ console.log('You must enter username, password.'); } 命令下载文件时注意到Azure虚拟机上的一些奇怪行为。似乎下载流是超级波涛汹涌的。通常,Azure VM会超快速地下载文件,因此不确定导致此问题的原因。该文件位于与VM相同的区域中的azure blob存储中。当我通过网络浏览器下载文件时,只需3秒钟。使用powershell需要大约一分钟! enter image description here

以下是使用PowerShell完成网络的屏幕截图。

澄清一下,这是我用来下载文件的代码......

Invoke-WebRequest

我在天蓝色画廊的2016-Datacenter图像中使用了任何版本的powershell。

2 个答案:

答案 0 :(得分:3)

是的,PowerShell cmdlet Invoke-WebRequest下载文件比Web浏览器慢,因为每个字节报告的进度,开销都高于其他(Web浏览器)。

有关Invoke-WebRequest速度的更多信息,请参阅answer of @jasongin

如果你想通过PowerShell下载文件,也许我们可以使用WebClient Class,比WebRequest Class快,我们可以使用这样的命令:

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

希望这有帮助。

答案 1 :(得分:1)

您没有显示有关如何使用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]

Why is this PowerShell code (Invoke-WebRequest / getElementsByTagName) so incredibly slow on my machines, but not others?

但一般情况下,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/invoke-webrequest-vs-system-net-webclient-download-speed