Выполнение одновременных фоновых заданий в PowerShell довольно просто, но я не могу заставить его работать с новым (в v3) командлетом Invoke-WebRequest.Выполнение параллельных заданий Invoke-WebRequest в PowerShell v3
У меня есть несколько тысяч файлов, которые я скачиваю скриптографически через 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, до сих пор не доставляя радости. Не знаю, почему этот конкретный командлет является таким педерастом.
Это отлично работает. Это где-то документально? Я прочитал и man__bobs и about_jobs_details man-страницы и не вижу ссылки на синтаксис $ using: syntax –
Я нашел эту информацию на $ using: [link] (http://blogs.msdn.com/b/ PowerShell/Архив/2012/06/14/новый-v3-язык features.aspx) – jbockle