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