Multithreading PowerShell
PowserShellを使ったマルチスレッドをテストしてみました。
1秒から10秒までスリープするスレッド10個を同時に走らせています。
AddScript, AddArgmentによるパラメータ渡し、結果取得をイメージするため、2乗する演算をいれています。(手抜き感・・)
ソースは下記サイトにあるものを簡略化しました。
環境 : PSVersion 2.0 / Windows 7
$threads = 10
$scriptBlock = {
Param (
[int]$num
)
Start-Sleep -Seconds $num
$res = New-Object PSObject -Property @{num=$num;num2=$num*$num}
Return $res
}
$runspacePool = [RunspaceFactory]::CreateRunspacePool(1, $threads)
$runspacePool.Open()
$jobs = @()
1..10 | % {
$job = 1::Create().AddScript($scriptBlock).AddArgument($_)
$job.runspacePool = $runspacePool
$jobs += New-Object PSObject -Property @{
num = $_
pipe = $job
result = $job.BeginInvoke()
}
}
ForEach ($job in $jobs)
{
$job.pipe.EndInvoke($job.result)
}

結果が1行/1秒ごとに表示されるので、同時に走っていることが確認できます。
$threads数を絞ると、表示終了までにさらに時間がかかることも確認できます。
参考サイト : http://thesurlyadmin.com/2013/02/11/multithreading-powershell-scripts/