basic powershell runspace
# ht http://thesurlyadmin.com/2013/02/11/multithreading-powershell-scripts/
$ScriptBlock = {
Param (
[int]$num
)
$reader = New-Object System.IO.StreamReader("C:\temp\million.txt")
while ($reader.ReadLine() -ne $null) {
$i++
}
$reader.close()
return $i-$num
}
$pool = [RunspaceFactory]::CreateRunspacePool(1, 5)
$pool.Open()
$jobs = @()
1..4 | % {
$job = [PowerShell]::Create()
$null = $job.AddScript($ScriptBlock)
$null = $job.AddArgument($_)
$null = $job.AddArgument("hello")
$job.RunspacePool = $pool
$jobs += New-Object PSObject -Property @{
RunNum = $_
Pipe = $job
Result = $job.BeginInvoke()
}
}
while ($jobs.Result.IsCompleted -notcontains $true) {}
$results = @()
ForEach ($job in $jobs) {
$results += $job.Pipe.EndInvoke($job.Result)
}
$results