2015-09-04 13 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のパラメータを与えるのと同じくらい多くのジョブを実行します。ノート私はループの中で睡眠を追加したので、不必要に動いていません。 –