powershell - 在 powershell 中并行运行任务

标签 powershell foreach parallel-processing task

我有一个像这样的 PowerShell 脚本:

Foreach ($file in $files) {
    [Do something]
    [Do something]
    [Do something]
}

这样,一个文件就会在另一个文件之后被处理。我想同时处理 4 个文件。

我知道 foreach 并行循环,但它会并行执行 [do some] 任务。我基本上想并行运行整个 foreach 循环。

如何在 PowerShell 中实现此目的?

最佳答案

您可以查看 Jobsrunspaces 。以下是乔布斯的示例:

$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是一些关于脚本 block 的文档。必须包含该参数的简短原因是因为与 PowerShell 函数不同,脚本 block 无法在大括号 {} 之外指定参数。

关于powershell - 在 powershell 中并行运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43685522/

相关文章:

php - 使用 foreach 循环更新数据库行

python - Python 中的并行处理选项

arrays - 数据行到字符串到数组的问题

string - Powershell 字符串不包含

for循环期间的Javascript关联数组修改

PHP - 显示来自 foreach 循环的 'X' 项,并带有链接以显示下一个 'X' 项

haskell - 多核处理器上 Haskell 运行时的结构

bash - 在 Unix 中合并 fastq.gz 文件

powershell - 需要在 powershell 中更新 New-Timespan cmdlet 的方法

powershell - 为什么带有多个-AND条件的If语句不能正常运行?