Operations Lab.

PowerShell で「特定 IP アドレス範囲へ ping」を並列化してみる

leave a comment »

前回の投稿で特定の IP アドレス範囲へ ping を実行する方法を記載しました。簡単なスクリプトで広い範囲に ping を実行できますが、応答を返さないホストが多いと実行終了までに時間がかかります。PowerShell 3.0 からは並列処理ができるようになっていますので、処理を並列化した場合はどうなるのかを試してみました。

今回はお手軽に、Foreach -Parallel を使用します。Foreach -Parallel はワークフローの中でしか使用できませんので、ping を実行するワークフローを定義し、実行時間を測定してみます。

ちなみに、某界隈で有名な Ahf 氏のブログによると、Foreach -Parallel はマルチスレッド処理ではないようです。この辺りは別の機会に調べてみたいと思います。

##############################################
# コード
##############################################

workflow pingall {
    foreach -parallel($a in 1..254) {
        ping -n 1 -w 1000 192.168.0.$a
    }
}

Measure-Command { pingall | Out-Null }
Measure-Command { 1..254 | % { ping -n 1 -w 1000 192.168.0.$_ } | Out-Null }

$a = & { arp -a }
$a | Select-String "  192.168.0." | Measure-Object


##############################################
# 実行結果
##############################################

# 普通に実行した場合の経過時間
Days              : 0
Hours             : 0
Minutes           : 2
Seconds           : 0
Milliseconds      : 825
Ticks             : 1208256432
TotalDays         : 0.00139844494444444
TotalHours        : 0.0335626786666667
TotalMinutes      : 2.01376072
TotalSeconds      : 120.8256432
TotalMilliseconds : 120825.6432

# parallel を使用した場合の経過時間
Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 3
Milliseconds      : 359
Ticks             : 633595249
TotalDays         : 0.000733327834490741
TotalHours        : 0.0175998680277778
TotalMinutes      : 1.05599208166667
TotalSeconds      : 63.3595249
TotalMilliseconds : 63359.5249

# オンラインな IP アドレス数
Count    : 134
Average  : 
Sum      : 
Maximum  : 
Minimum  : 
Property : 

192.168.0.1 ~ 192.168.0.254 までをチェックしていますので、全 IP アドレス数は 254 個です。オンラインなアドレスが 134 個ですので、オフラインまたは使用していないアドレスが 120 個となります。普通に実行した場合(parallel を使用しなかった場合)は実行に 2 分ほどかかっていますが、ping のタイムアウトを 1 秒に指定している為、経過時間のほとんどがタイムアウト待ち時間となります。(120 アドレスでタイムアウトまで待ちが発生した。)

parallel を使用すると 1 分程度で処理が完了している為、ある程度の効果はありそうです。但し、どんな状況でも効果があるわけでは無いので、利用する際は十分考慮した方が良いでしょう。

広告

Written by kazu

2013/03/08 @ 22:50

カテゴリー: PowerShell

Tagged with

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。