4
在PowerShell中同时运行后台作业非常简单,但我似乎无法使用新的(v3)cmdlet Invoke-WebRequest处理它。在PowerShell v3中运行并行的Invoke-WebRequest作业
我有几千个文件,我正在通过PowerShell以字母形式下载。伟大的作品,但在系列做他们正在天:
for($f=0;$f -lt $urlList.Count;$f++)
{
$remote = $urlList[$f] + $fileList[$f]
$local = 'C:\folder\' + $fileList[$f]
Invoke-WebRequest $remote -Method Get -OutFile $local -UserAgent FireFox
}
我在撬动了“AsJob”的方法进行了多种尝试,但他们要么错误出或完全罚款还没有本地文件得到保存。下面是后者的一个例子:
for($f=0;$f -lt $urlList.Count;$f++)
{
$remote = $urlList[$f] + $fileList[$f]
$local = 'C:\folder\' + $fileList[$f]
$command = "Invoke-WebRequest $remote -Method Get -OutFile $local -UserAgent FireFox"
Start-Job {Invoke-Expression -Command $command}
}
Get-Job|Wait-Job
输出的例子:
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
339 Job339 BackgroundJob Running True localhost Invoke-Expression -Com...
341 Job341 BackgroundJob Running True localhost Invoke-Expression -Com...
343 Job343 BackgroundJob Running True localhost Invoke-Expression -Com...
339 Job355 BackgroundJob Completed True localhost Invoke-Expression -Com...
341 Job357 BackgroundJob Completed True localhost Invoke-Expression -Com...
343 Job359 BackgroundJob Completed True localhost Invoke-Expression -Com...
奇怪的是,上面的大致完成以最快的速度,将采取下载相关文件的工作...所以它似乎数据正在某处 - 只是没有保存到我的位置。我认为这是记忆,但没有被保存就被抛弃。试图添加和删除'PassThru'选项,但获得相同的结果。也尝试将它输送到Out-File,但仍然没有快乐。不知道为什么这个特定的cmdlet是这样一个bug。
这很好。这是记录在某处吗?我已经阅读了about_jobs和about_jobs_details手册页,并且看不到任何对$ using:语法的引用 – 2013-03-03 06:56:09
我在$ using中找到了以下信息:[link](http://blogs.msdn.com/b/) PowerShell中/存档/ 2012/06/14 /新V3-语言features.aspx) – jbockle 2013-03-04 03:43:35