I can’t seem to get multi-threading to work properly. Can someone take a look and see what I am missing or doing incorrectly. The $code section actually works without multi-threading.
$mobile = Get-ADComputer -SearchBase 'OU' -SearchScope 2 -Filter { (Name -notlike "MBV*") } | Select -ExpandProperty Name | Sort $path = "\directory" $outfile = "C:\Temp\ipaddress.txt" $RunspacePool = [runspacefactory]::CreateRunspacePool(1, 4) $RunspacePool.Open() $Code = { param($pc) $filenames = Get-ChildItem $path -Recurse | Where-Object { $_ -like "$pc*" } | Sort-Object -Property Name if ($filenames -ne $null) { $file = $filenames[-1] $ipstack = Get-Content "$path\$file" | Select-String -pattern "44\.", "172\." -List | group path | select group $ipstack = $ipstack.Group $ipstack = $ipstack | Out-String $ipstart = $ipstack.IndexOf(";") $ipstart = $ipstart + 1 $ipstring = $ipstack.Substring($ipstart) $ipend = $ipstring.IndexOf(":") $ip = $ipstring.Substring(0, $ipend) "$ip`t$pc" | Out-File $outfile -Append } } foreach ($pc in $mobile) { $PSInstance = [powershell]::Create().AddScript($Code).AddArgument($pc) $PSInstance.RunspacePool = $RunspacePool $PSInstance.BeginInvoke() }
Here is the output:
>> Running (MultiThreading.ps1) Script…
>> Platform: V4 64Bit (STA)
CompletedSynchronously IsCompleted AsyncState AsyncWaitHandle
---------------------- ----------- ---------- ---------------
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEvent
False False System.Threading.ManualResetEve
>> Execution time: 00:00:02
>> Script Ended