2015-09-04 14 views
5

Sto testando alcuni domini e la loro capacità di avvisarmi quando si verifica un evento anomalo. Sto usando nmap per eseguire la scansione dei domini per le porte aperte. Lo script seguente apre una nuova finestra cmd ed esegue nmap. Cerco l'ID del processo e controlla se il processo (cmd) è ancora in esecuzione. Una volta terminata la scansione, eseguirà nuovamente la scansione nmap.Processi multipli ricorrenti

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){ } 
} 

Questo funziona correttamente. Quello di cui ho bisogno di aiuto è fare questo processo 8 volte in parallelo. (se possibile)

+1

Qual è la versione di PowerShell? – Piyush

+0

è la versione 2 –

risposta

4

Bene, a meno che non vi sia un motivo specifico per cui si sta avviando CMD (come la necessità di vedere l'output), consiglierei di utilizzare invece i lavori. Sono facili da gestire e testare se sono ancora in esecuzione.

$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

questo aiuterà a eseguire più lavori in parallelo? –

+0

I lavori vengono eseguiti in modo asincrono, quindi sì –

+0

Per chiarire, lo script precedente crea lavori e li esegue in parallelo, quindi scorre ripetutamente su di essi e riavvia quelli che sono terminati. Esegue tanti lavori quanti i parametri $ sx. Nota Ho appena aggiunto una sospensione nel ciclo in modo che non funzioni inutilmente. –