seansummers
12/29/2015 - 11:04 PM

basic powershell runspace

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