2015-09-04 39 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參數運行儘可能多的作業。注意我剛剛在循環中添加了一個睡眠,所以它不會不必要地運行。 –