2015-09-04 64 views
5

我正在测试一些域,并在异常事件发生时提醒我注意。我正在使用nmap扫描打开的端口域。下面的脚本打开一个新的cmd窗口并运行nmap。我搜索进程ID并检查进程(cmd)是否仍在运行。一旦扫描结束,它将再次运行nmap扫描。多次重复进程

function nmaptest { 
    $prog1="cmd" 
    [email protected]("/C";"nmap.exe -Pn -sX 192.168.1.0/24") 
    Start-Process -Verb runas $prog1 $params1 #starts 
} 

while(1 -eq 1){ 
    nmaptest 
    $processes = get-process $prog1 | out-string 
    $sp = $processes.Split(' ',[System.StringSplitOptions]::RemoveEmptyEntries) 
    $procid = $sp[22] 
    echo $procid 

    while(get-process -id $procid){ } 
} 

这工作正常。我需要帮助的是并行处理8次。 (如果可能的话)

+1

什么是您的PowerShell版本? – Piyush

+0

它是版本2 –

回答

4

那么除非有任何特定的原因,你启动CMD(如需要看到输出),我建议使用作业。如果他们仍在运行,他们很容易管理和测试。

$jobs = @() 
$sx = '192.168.1.0/24', 'range2', 'etc' 
For ($i = 0; $i -lt $sx.Length; $i++) { $jobs += Start-Job { nmap.exe -Pn -sX $sx[i] } } 

while ($true) { 
    For ($i = 0; $i -lt $sx.Length; $i++) { 
     if ($jobs[i].State -eq "Completed" { 
      Write-Output ("Completed job for " + $sx[i]) 
      Receive-Job $jobs[i] 
      $jobs[i] = Start-Job { nmap.exe -Pn -sX $sx[i] } 
     } 
    } 
    Start-Sleep -s 5 
} 
+0

这将帮助并行运行多个作业吗? –

+0

作业异步运行所以是 –

+0

为了阐明,上面的脚本创建作业并且并行运行它们,然后重复循环它们并重新启动任何已完成的作业。它会为您提供$ sx参数运行尽可能多的作业。注意我刚刚在循环中添加了一个睡眠,所以它不会不必要地运行。 –