2017-04-28 15 views

答えて

6

Jobsまたはrunspacesをご覧ください。

$block = { 
    Param([string] $file) 
    "[Do something]" 
} 
#Remove all jobs 
Get-Job | Remove-Job 
$MaxThreads = 4 
#Start the jobs. Max 4 jobs running simultaneously. 
foreach($file in $files){ 
    While ($(Get-Job -state running).count -ge $MaxThreads){ 
     Start-Sleep -Milliseconds 3 
    } 
    Start-Job -Scriptblock $Block -ArgumentList $file 
} 
#Wait for all jobs to finish. 
While ($(Get-Job -State Running).count -gt 0){ 
    start-sleep 1 
} 
#Get information from each job. 
foreach($job in Get-Job){ 
    $info= Receive-Job -Id ($job.Id) 
} 
#Remove all jobs created. 
Get-Job | Remove-Job 

$fileは互いにと並列に実行されている私はそれを持っている上記のコードで(4個まで同時に実行されている):ここでジョブの一例です。

編集:コメントに応じて、hereはscriptblocksに関するドキュメントです。 PowerShell関数とは異なり、scriptblockは中括弧{}の外側にあるパラメータを指定することができないため、パラメータを含める必要がある理由についての短い理由があります。

+0

実行中のジョブを取得して完了するのを待つために含まれている全てのファンシーロジックではなく、 'Wait-Job'コマンドレットの使用をお勧めします。 [私が個人的にそれを学んだ、そして好きなラン空間の代替ウォークスルーへのリンク](https://foxdeploy.com/2016/05/17/part-v-powershell-guis-responsive-apps-with-progress- bar /) – TheMadTechnician

+0

ああ、おそらく '$ file'パラメータをあなたのscriptblockに渡さなければならない理由を説明するべきでしょう。 – TheMadTechnician

+0

これについては、今後のスクリプトで検討します。私はWait-Jobが存在するかどうか分からなかった。 – CuriousOne

2

Get-Help about_Foreach-Parallelによれば、ForEach -Parallel...は、各項目の平行全体スクリプトブロックを処理しますが、(Parallel {...}で括弧に入れた場合、おそらくそれらが並列されるが)スクリプトブロック内のコマンドを順次処理されます。ただし、このスクリプトを受け入れるには、スクリプトがPowerShellのワークフローである必要があります。 ParallelおよびSequenceのキーワードは、ワークフロー内でのみ有効です。

+2

https://msdn.microsoft.com/en-us/powershell/reference/5.1/psworkflow/about/about_foreach-parallelから:Windows PowerShell WorkflowのForEach -Parallel言語の構成について説明します。ワークフローを使用していない場合は、-Parallelパラメータは存在しません。私は、OPがワークフローで作業していると感じることはありませんでした。 – tommymaynard

+0

@tommymaynard - はい、 'Parallel'スイッチと構造はワークフローにのみ適用でき、私はそれに注意しました。 querentは、彼の質問で「Foreach-parallel」の構文について言及しましたが、その影響を誤解しているように見えました。そのため、ワークフローが可能であると仮定し、それに基づいて答えました。彼がいない場合、奇妙な人が与えた仕事の解決策が行く方法かもしれません。 –

+0

あなたは本当に正しいです、あなたはワークフローについて言及しました。それについて申し訳ありません! – tommymaynard

関連する問題