您好,登錄后才能下訂單哦!
最近在學Python的爬蟲,昨天試著用多線程去使用不同的代理IP,基本原理是把所有的IP地址都放入一個隊列,然后使用多線程地去讀取隊列里面的值。
今天突然想到,類似的方式在PowerShell里面能不能實現呢?PowerShell自己沒有直接可以使用的隊列模塊,不過可以調用.Net里面的類來實現。
下面是一個簡單的例子
$queue = [System.Collections.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 (
[string]$value
)
$ip=$value.Split(":")[0]
$port=$value.Split(":")[1]
$a=test-netconnection -ComputerName $ip -Port $port
$RunResult = New-Object PSObject -Property @{
ComputerName=$ip
Port=$port
TCP=$a.TCPTestSucceeded
}
Return $RunResult
}
#創建一個資源池,指定多少個runspace可以同時執行
$RunspacePool = [RunspaceFactory]::CreateRunspacePool(1, $Throttle)
$RunspacePool.Open()
$Jobs = @()
for($i=1;$i -lt 20;$i++){
$currentvalue=$queue.Dequeue()
Write-Host $currentvalue
$Job = [powershell]::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
結果如下
Waiting................................................................................All jobs completed!
Port ComputerName TCP
80 137.74.168.174 True
8080 103.28.161.68 True
53281 91.151.106.127 False
3128 177.136.252.7 True
80 47.89.22.200 True
8888 118.69.61.57 True
8080 192.241.190.167 True
80 185.124.112.130 True
3128 83.65.246.181 True
3128 79.137.42.124 True
8080 95.0.217.32 False
8080 104.131.94.221 True
65301 177.234.7.66 True
8080 37.57.179.2 False
8080 197.211.27.234 True
8080 139.59.117.11 True
8080 168.0.158.53 False
8080 154.48.196.1 True
8080 139.59.125.53 True
成功!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。