Revision: 40143
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 26, 2011 22:00 by itsvetkov
Initial Code
ParallelForEach-Object(
[ScriptBlock] $Script = { param([Object] $Data) Write-Output $Data },
[Int] $Threads = 0
)
{
begin {
$Jobs = @()
if ($Threads -eq 0) {
Get-WmiObject Win32_Processor | ForEach-Object { $Threads = $Threads + $_.NumberOfLogicalProcessors }
}
Write-Host "Executing $Threads thread(s)"
}
process {
# Write-Host 'Number of jobs:' $Jobs.Length
if ($Jobs.Length -ge $Threads) {
# Write-Host 'Waiting for any job to complete'
$CompletedJob = Wait-Job $Jobs -Any
$Jobs = $Jobs -ne $CompletedJob
Receive-Job $CompletedJob
Remove-Job $CompletedJob
}
$Jobs = $Jobs + (Start-Job $Script -ArgumentList $_)
}
end {
while ($Jobs.Length -gt 0) {
$CompletedJob = Wait-Job $Jobs -Any
$Jobs = $Jobs -ne $CompletedJob
Receive-Job $CompletedJob
Remove-Job $CompletedJob
}
}
}
Initial URL
Initial Description
Initial Title
Parallel “For Eachâ€
Initial Tags
Initial Language
Windows PowerShell