使用Powershell异步下载多个大文件

时间:2019-03-15 13:32:18

标签: powershell

我有四个大型OS安装介质需要下载。如果我等待每次下载完成然后再进行下一个下载,则将花费很长时间。 在下载之前,我想检查媒体是否已经存在。

该解决方案可能是哈希表,测试路径和invoke-webrequest的组合,但我无法破解。

因此,伪造了以下内容:

Check if file1 exists
if true then download and check file2
if false check file 2
check if file 2 exists...

因此,检查文件是否存在,如果不存在,请开始下载所有丢失的文件。

我对PS的经验不是很丰富,因此非常感谢所有帮助,非常感谢!研究答案很有趣,但我觉得我在这里错过了一个关键字...

1 个答案:

答案 0 :(得分:0)

有一种使用WebClient类进行异步下载的相当简单的方法,尽管它可能在较旧的PS版本中不可用。参见下面的示例

$files = @(
 @{url = "https://github.com/Microsoft/TypeScript/archive/master.zip"; path = "C:\temp\TS.master.zip"}
 @{url = "https://github.com/Microsoft/calculator/archive/master.zip"; path = "C:\temp\calc.master.zip"}
 @{url="https://github.com/Microsoft/vscode/archive/master.zip"; path = "C:\temp\Vscode.master.zip"}
)

$workers = foreach ($f in $files) { 

$wc = New-Object System.Net.WebClient

Write-Output $wc.DownloadFileTaskAsync($f.url, $f.path)

}

# wait until all files are downloaded
# $workers.Result

# or just check the status and then do something else
$workers | select IsCompleted, Status