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。

回答

4

您需要傳遞參數,例如他們實際上將其納入工作中。在V3,你可以使用$使用:語法來做到這一點:

for($f=0;$f -lt $urlList.Count;$f++) 
{ 
    $remote = $urlList[$f] + $fileList[$f] 
    $local = 'C:\folder\' + $fileList[$f] 
    Start-Job {Invoke-WebRequest $using:remote -Method Get -OutFile $using:local -UserAgent FireFox} 
} 
Get-Job|Wait-Job 

BTW,你不需要使用調用-表達。只需將您想要在代碼中運行的代碼放在scriptblock中,即一組大括號{...}

+0

這很好。這是記錄在某處嗎?我已經閱讀了about_jobs和about_jobs_details手冊頁,並且看不到任何對$ using:語法的引用 – 2013-03-03 06:56:09

+2

我在$ using中找到了以下信息:[link](http://blogs.msdn.com/b/) PowerShell中/存檔/ 2012/06/14 /新V3-語言features.aspx) – jbockle 2013-03-04 03:43:35