PowerShell 多线程测试IP端口
$queue = ::Synchronized( (New-Object System.Collections.Queue) )$lines=gc C:\temp\thebigproxylist-17-12-20.txt
foreach($line in $lines){
$queue.enqueue($line)
}
write-host $queue.count
$Throttle = 5 #threads
#脚本块,对指定的IP测试端口,结果保存在一个对象里面
$ScriptBlock = {
Param (
$value
)
$ip=$value.Split(":")
$port=$value.Split(":")
$a=test-netconnection -ComputerName $ip -Port $port
$RunResult = New-Object PSObject -Property @{
ComputerName=$ip
Port=$port
TCP=$a.TCPTestSucceeded
}
Return $RunResult
}
#创建一个资源池,指定多少个runspace可以同时执行
$RunspacePool = ::CreateRunspacePool(1, $Throttle)
$RunspacePool.Open()
$Jobs = @()
for($i=1;$i -lt 20;$i++){
$currentvalue=$queue.Dequeue()
Write-Host $currentvalue
$Job = ::Create().AddScript($ScriptBlock).addargument($currentvalue)
$Job.RunspacePool = $RunspacePool
$Jobs += New-Object PSObject -Property @{
Server = $currentvalue
Pipe = $Job
Result = $Job.BeginInvoke()
}
}
#循环输出等待的信息.... 直到所有的job都完成
Write-Host "Waiting.." -NoNewline
Do {
Write-Host "." -NoNewline
Start-Sleep -Seconds 1
} While ( $Jobs.Result.IsCompleted -contains $false)
Write-Host "All jobs completed!"
#输出结果
$Results = @()
ForEach ($Job in $Jobs)
{ $Results += $Job.Pipe.EndInvoke($Job.Result)
}
$Results
页:
[1]