はじめに
ネットワーク管理やトラブルシューティングの現場では、複数のIPアドレスやホストに対して同時にpingを送信し、応答状況を一度に確認したい場面が頻繁にあります。コマンドプロンプト標準のpingコマンドは通常一つの宛先しか受け付けませんが、工夫次第で複数の宛先を効率的にテストできます。本記事では、Windows環境において複数の宛先に同時にpingを実行するための具体的な方法を、コマンドプロンプトの基本機能からPowerShell、サードパーティツールまで幅広く解説します。それぞれの方法のメリットとデメリットを明確にし、実務に役立つ知識を提供します。
バッチファイルとforループを用いた逐次ping
Windowsのコマンドプロンプトで複数のIPアドレスに対してpingを実行する最も古典的な方法は、バッチファイル内でforループを利用することです。例えば、192.168.0.1から192.168.0.254までのネットワーク全体をスキャンする場合、以下のコマンドを入力します。
for /L %i in (1,1,254) do ping -n 1 -w 20 192.168.0.%i | find "Reply"
このコマンドでは、変数%iが1から254まで1ずつ増加し、各IPアドレスに対して1回だけpingを送信します。-w 20でタイムアウトを20ミリ秒に設定し、応答があった場合のみReplyを含む行を表示します。これにより、応答のあったホストだけを素早くリストアップできます。ただし、この方法は純粋な逐次処理であり、254台すべてのスキャンが完了するまでに時間がかかります。タイムアウト値を適切に設定しないと、1台あたりの待ち時間が増大するため注意が必要です。
この手法の利点は、追加のソフトウェアを一切必要としないことです。バッチファイルとして保存すれば、何度でも再利用できます。また、出力をテキストファイルにリダイレクトすることで、後から結果を解析することも容易です。一方で、真の同時実行ではないため、リアルタイム性が求められる用途には不向きです。

forループを使ったさまざまなバリエーションについては、SuperUserのスレッド(CMD.EXE command to ping a range of addresses)が参考になります。ここでは、タイムアウトの調整や出力のカスタマイズに関する具体的なアドバイスが提供されています。
複数のIPアドレスを一つのコマンドで指定
意外と知られていない機能として、pingコマンドに複数のIPアドレスをスペース区切りで与える方法があります。例えば、次のように入力します。
ping 8.8.8.8 1.1.1.1 8.8.4.4
このコマンドを実行すると、3つのIPアドレスすべてに対して順番にpingが実行されます。厳密には並列処理ではなく逐次処理ですが、数台のホストを手軽にテストしたい場合には便利です。Microsoftの公式ドキュメントにもこの構文が記載されており、Windowsのpingコマンドは複数の宛先を引数として受け付けることが確認されています。ただし、多くのホストを対象とする場合には、後述するPowerShellの利用を推奨します。この方法は特に、アドホックな確認作業において、複数のコマンドプロンプトを開く手間を省く点で有用です。
PowerShellのTest-Connectionを使った方法
Windows PowerShellには、pingコマンドの代替となるTest-Connectionというコマンドレットが用意されています。このコマンドレットの大きな特徴は、複数のコンピュータに対して並列にICMPパケットを送信できる点です。例えば、GoogleのパブリックDNSサーバ3台に対して1回ずつpingを実行するには、以下のコマンドを入力します。

Test-Connection -ComputerName 8.8.8.8, 1.1.1.1, 8.8.4.4 -Count 1
このコマンドを実行すると、各IPアドレスに対して同時にpingが送信され、応答時間やパケット損失がリアルタイムに近い形で表示されます。Countパラメータで送信回数を指定でき、-Quietオプションを追加すれば成功可否のみを論理値で取得することも可能です。また、-AsJobオプションを使用することで、バックグラウンドジョブとして実行し、後から結果を収集するという高度な使い方もできます。
Test-ConnectionはPowerShell 3.0以降に標準搭載されており、Windows 7 SP1以降の環境で利用できます。従来のping.exeと比較して、並列性や出力のカスタマイズ性で優れているため、ネットワーク管理者にとって強力なツールとなります。詳細なパラメータや使用例は、Microsoft Docsの公式ページ(Test-Connection (Microsoft.PowerShell.Management))を参照してください。
PowerShellジョブによる完全並列処理
Test-Connectionは並列にpingを実行しますが、連続的な監視には適していません。複数の宛先に対して常にpingを送り続けたい場合には、PowerShellのジョブ機能を利用します。ジョブとは、バックグラウンドで実行されるスクリプトブロックであり、複数のジョブを同時に開始することで真の並列処理を実現できます。以下のスクリプトは、2つのIPアドレスに対して1秒間隔で連続pingを実行します。
$ips = @("8.8.8.8", "1.1.1.1")
foreach ($ip in $ips) {
Start-Job -ScriptBlock {
param($target)
while ($true) {
ping -n 1 $target
Start-Sleep -Seconds 1
}
} -ArgumentList $ip
}

このスクリプトでは、各IPアドレスに対して独立したジョブが作成され、それぞれが無限ループでpingを実行します。各ジョブの出力はReceive-Jobコマンドで取得できますが、リアルタイムに確認したい場合にはGet-JobやWait-Jobを組み合わせて利用します。この方法の利点は、完全な並列処理が可能であり、かつスクリプトとして柔軟に制御できることです。例えば、監視間隔を調整したり、応答がなくなった場合にアラートを出すといった拡張も容易です。
ただし、ジョブの管理にはある程度のPowerShell知識が必要であり、多くのジョブを同時に実行するとシステムリソースを消費します。監視対象の台数は、使用環境の性能に応じて適切に設定する必要があります。また、ジョブを停止する際にはStop-Jobコマンドを忘れずに実行しましょう。RedditのPowerShellコミュニティでは、このジョブ手法に関する実践的な議論が多く見られます。
サードパーティツールPingInfoViewの活用
コマンドライン操作が苦手な方や、より直感的なインターフェースで複数ホストを監視したい場合には、サードパーティ製のツールが適しています。その中でも特に有名なのが、NirSoftが提供するPingInfoViewです。このツールは、複数のホストをリストで管理し、同時にpingを実行して結果をリアルタイムに表示します。設定は非常に簡単で、監視したいホスト名やIPアドレスを追加するだけで、自動的に並列pingが開始されます。応答時間やパケット損失率が表形式で更新され、視覚的に状況を把握できます。
PingInfoViewの主な機能は以下の通りです。
1. 複数ホストの一括追加と削除が可能
2. リアルタイムの応答時間とパケット損失の表示
3. 結果をHTML、テキスト、CSVファイルにエクスポート
4. 各ホストに対して個別のping間隔を設定可能
5. 音やポップアップによるアラート機能

これらの機能により、ネットワークの簡易監視ツールとして非常に高い実用性を持ちます。このツールはNirSoftの公式サイトから無料でダウンロードでき、ポータブル版も用意されているため、インストール不要で利用できます。公式サイト(NirSoft PingInfoView)からダウンロードし、管理者権限で実行することで、すぐに使い始めることができます。サードパーティツールに抵抗がなければ、最も手軽に複数宛先の同時pingを実現できる方法の一つです。
各手法の比較
ここで、本記事で紹介した主な手法を一覧表にまとめます。これにより、各手法の特性を一目で比較できます。
手法 | 並列性 | 連続監視 | 難易度 | 必要ソフトウェア
forループ | 逐次 | 不可 | 低 | なし
複数IP指定 | 逐次 | 不可 | 低 | なし
Test-Connection | 並列 | 不可 | 中 | PowerShell
PowerShellジョブ | 並列 | 可能 | 高 | PowerShell
PingInfoView | 並列 | 可能 | 低 | サードパーティ
この表から分かるように、目的とスキルレベルに応じて最適な方法は異なります。一度だけの簡易確認にはforループや複数IP指定が手軽ですが、継続的な監視や真の並列処理が必要な場合にはPowerShellやサードパーティツールの導入を検討すべきです。特に、ネットワーク障害の原因特定には、リアルタイム性が重要となるため、Test-ConnectionやPingInfoViewが活用できます。
まとめ
本記事では、複数の宛先に同時にpingを実行するための具体的な方法を、コマンドプロンプト、PowerShell、サードパーティツールの三つの軸で解説しました。コマンドプロンプトだけでもforループや複数IP指定である程度の対応は可能ですが、真の並列処理や連続監視を実現するには、PowerShellのTest-Connectionやジョブ機能の習得が有効です。また、GUIでの操作を好む場合には、PingInfoViewのような専用ツールが強力な味方になります。

ネットワーク管理の現場では、多様な環境や要件に柔軟に対応できる知識が求められます。本記事で紹介した各手法の特性を理解し、実際の業務やトラブルシューティングに活用していただければ幸いです。どの方法を選ぶにしても、まずは小規模なテストで動作を確認し、徐々に規模を拡大することをお勧めします。
参考文献
本記事の作成にあたり、以下の情報源を参考にしました。
SuperUser: CMD.EXE command to ping a range of addresses
https://superuser.com/questions/420714/cmd-exe-command-to-ping-a-range-of-addresses
Microsoft Learn: ping command documentation
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ping
Microsoft Docs: Test-Connection cmdlet
https://learn.microsoft.com/powershell/module/microsoft.powershell.management/test-connection
Reddit r/PowerShell: How to do continuous ping to multiple IPs and...
https://www.reddit.com/r/PowerShell/comments/17949iu/how_to_do_continuous_ping_to_multiple_ips_and/
NirSoft: PingInfoView
https://nirsoft.net/utils/pinginfoview.html
Informatique Mania: Comment cingler plusieurs adresses IP en même temps
https://informatique-mania.com/pt/linternet/comment-cingler-plusieurs-adresses-ip-en-meme-temps




