我々は何時まで機器数分のコマンドプロンプトを開くのか

こんにちは。 SYC 松本です。
梅雨をすっとばして真夏の暑さですね。皆様も熱中症にはお気をつけください。
インフラ構築していたり、運用管理していたりしますと Windows Update などでサーバー再起動とかあるあるですよね。
或いは、建物の電源関連法定点検対応で計画停電によるシステム停止と起動があったりしますよね。
そんな時、機器が停止したかどうか、機器が起動したかどうか、どのように確認されていますでしょうか?
Zabbix などシステム監視ソリューションの画面眺めたりしますか?
肝心のその監視ソリューションのシステムも停止・再起動していたらどうしますか?
サーバー機器などのコンソールが直接見れる環境であれば、画面を見たりしますかね。
データセンターやクラウドにある、あるいは自社内でもサーバールームなど隔離されたエリアにあって実機確認が面倒な場合、ping しますよね。ping。
※もしかするとフリーウェア ExPing かもしれないですけれども、、、
個人的には ExPing の存在を失念していたのですが 2005年が最後の最新版で終わっています。
忘れていたくらいなので、使っていませんでした。すみません。
ping はとても便利です。
Windows 端末を作業に用いるとすれば、コマンドプロンプトや PowerShell の画面から
ping 192.168.151.100 -t

などとすれば、継続的に疎通確認が行え、対象機器の通信可否が容易にモニターできます。
対象機器が複数ある場合でも、必要数のコマンドプロンプトなどを開きそれぞれで ping を撃てばよいのです。
以下は、無線 LAN アクセスポイント Aruba AP535 に対する ping の例です。
IP アドレス 192.168.151.101 は AP1、102 は AP2 の2台構成です。
仮想コントローラー IP アドレスを 192.168.151.100 に設定しているため、ping で3アドレスに疎通確認をしています。
「あぁ、やるねぇ!やるやる」て感じのですよね。
コマンドプロンプト/PowerShell の窓を複数開き、それぞれ異なるアドレスに ping -t して、ちょっとずつ表示位置をずらして疎通を見る操作です。
これ、3つくらいならいいんですが、もっとたくさん対象があるときや、うっかり左上のウィンドウクリックして前面によると他のウィンドウが見えなくなったり、収集付かなくなると最小化したりいろいろやって結構大変で面倒なんですよね。
特に 一旦作業終了した風に見えてもう一度やるときにもう一度ウィンドウ開いて個別 ping を・・・
ぃゃぃゃ、そうなると以下のような内容のバッチファイル pingstart.bat を作成して、バッチファイル実行すれば ping が複数開くようにしておけば、、、
沢山開いて見づらいことは解消されませんが、複数開く面倒くささや、もしかすると宛先アドレスをミスタイプする可能性を減らせるかもしれません。
start ping 192.168.151.100 -t
start ping 192.168.151.101 -t
start ping 192.168.151.102 -t
そして 例えば AP1 (IP 101) がダウンした時、仮想コントローラー (IP 100) もダウンしたが、 AP2 に仮想コントローラー機能がフェイルオーバーして再度 ping が応答してきたことが分かります。
※ この検証環境には AP 2 台しかないため AP2 に移行したことはこの時点で確定です。

一応 ping でこの場合はわかるのですが、なんでしょうね。
Aruba AP は再起動すると、 ping が通り始める=ネットワークが開始したあと、Web サービスが起動してきて初めてちゃんと動きだすのですよ。
ですので、AP に ping が通り始めてすぐに Web ブラウザでアクセスを試みると起動完了してないので、「まだ接続できない」のです。
この管理対象が Windows 端末の場合、初期値で Windows Firewall によって ping (ICMP) は遮断されているので、そもそも死活監視になっていない可能性も捨てきれません。
その他重要なサーバー機器などでは ping も含めてサービス提供に必要なポート以外全遮断になっているというのもある話です。
そこで、Test-MultiPing であります。
Test-MultiPing は、 SHIMSOFT-Fundamentals PowerShell モジュールに含まれています。
SHIMSOFT-Fundamentals モジュールをインストールするには以下の方法で。
※ 中身は全部 PowerShell スクリプトであり余計なバイナリのインストールはありません。
# PowerShell Gallery にアクセスできることを確認する
Find-Module -Name SHIMSOFT-Fundamentals
# インストールする
Install-Module -Name SHIMSOFT-Fundamentals -Scope CurrentUser
# すでに旧バージョンの SHIMSOFT-Fundamentals がインストール済みの場合は更新する
Update-Module -Name SHIMSOFT-Fundamentals
構文
Test-MultiPing [-IPList] [[-NumOf] ] [[-Timeout] ] [[-Height] ] [[-Width] ] [[-Datetime]] [[-LogFile] ] [[-CSV]] [[-Append]]
ざっくり使い方は以下の通りです。
# 2個の宛先 (Google Public DNS) に ping
Test-MultiPing -IPList 8.8.8.8, 8.8.4.4
Start pinging…
Count 8.8.4.4 8.8.8.8
—– ——- ——-
1 o o
2 o o
3 o o
4 o o
5 o o
Count 8.8.4.4 8.8.8.8
—– ——- ——-
6 o o
7 o o
8 o o
# o = 疎通あり、x = 疎通無し
# DNS なのでポート53(TCP 53) の疎通も確認したい場合、IP アドレスに”:ポート番号” を付記します。
Test-MultiPing -IPList 8.8.8.8, 8.8.4.4, 8.8.8.8:53, 8.8.4.4:53
Start pinging…
Count 8.8.4.4 8.8.4.4:53 8.8.8.8 8.8.8.8:53
—– ——- ———- ——- ———-
1 o o o o
2 o o o o
3 o o o o
4 o o o o
5 o o o o
# ヘッダー部が IP or IP:ポート 番号で見分けにくい、、、と思った場合、別名を付与できます。”IP アドレス:ポート番号:別名” 形式で指定します。
# ping 疎通確認の場合はポート番号を未指定にします。
Test-MultiPing -IPList 8.8.8.8::8ping, 8.8.4.4::4ping, 8.8.8.8:53:8dns, 8.8.4.4:53:4dns
Start pinging…
Count 4dns 4ping 8dns 8ping
—– —- —– —- —–
1 o o o o
2 o o o o
3 o o o o
4 o o o o
5 o o o o
# 宛先を毎回列挙するの面倒、、、もっとたくさんある、、、使いまわしたい、、、という場合は
# “targetlist.txt” など適当なテキストファイルに1行1宛先で列挙することで再利用可能です。
Test-MultiPing -IPList (Get-Content -Path .\targetlist.txt)
Start pinging…
Count 4dns 4ping 8dns 8ping
—– —- —– —- —–
1 o o o o
2 o o o o
3 o o o o
4 o o o o
Test-MultiPing の結果表示ですが、ヘッダー行「Count 宛先1 宛先2」と「—-」は既定値では5カウントごとに表示されます。
ping 疎通確認しながら別のステータスや操作画面見るとき、ping 飛ばしているコマンドプロンプトって邪魔じゃないですか?
なんか薄ーくしたりして画面上下に逃がすじゃないですか、きっと。
するとどこの表示がどれのステータスかわかりにくいので、やや頻繁にヘッダーが出てくれることで見失わなくなる効果があります。
また、Count 列は ping によくある画面いっぱいに同じ行表示で満たされて、「しかし動いているか動いていないか良くわからない」を抑止してくれます。
ヘッダー表示頻度は -Height オプションで変更可能です。
-LogFile オプションを指定すると画面に表示するのと同様の情報をファイルに保存できますが、この場合ログファイル内のヘッダー行は先頭のみとなります。
「分析とかに利用するのには CSV の方が良いのだが・・・」という人には -CSV オプションを併用すると CSV形式で保存されます。
「記録エビデンスとするのに時刻入っていれば・・・」という人は -Datetime オプション指定で Count 列が DateTime 列になります。
# Datetime オプション指定時
Test-MultiPing -IPList (Get-Content -Path .\targetlist.txt) -Datetime
Start pinging…
DateTime 4dns 4ping 8dns 8ping
——– —- —– —- —–
2025/06/10 11:17:41 o o o o
2025/06/10 11:17:44 o o o o
2025/06/10 11:17:48 o o o o
2025/06/10 11:17:51 o o o o
2025/06/10 11:17:54 o o o o
お気づきでしょうか・・・ Datetime 表示みていると行ごとの時間差が結構あるのです。
これは仕組み上致し方ないのですが、ターゲット数増えると1行分の処理時間が増え、間隔が広がります。
例えば、Aruba AP (IAP) を利用する場合で、仮想コントローラーIP、各 AP の IP をウォッチする場合こんな感じになります。
「TestAP.txt」の中身
# 仮想コントローラー
192.168.151.100::AP-VC-Ping
192.168.151.100:443:AP-VC-Web
# AP1
192.168.151.101::AP-1-Ping
192.168.151.101:443:AP-1-Web
# AP2
192.168.151.102::AP-2-Ping
192.168.151.102:443:AP-2-Web
このファイルを利用した Test-MultiPing の使用例

この時、仮想コントローラーは AP 1 で稼働中でした。試しに AP1 をダウンさせた場合を見てみます。
AP1 のダウンとともに、仮想コントローラーもダウンしていることが分かります。
11:54:41 にダウン。そして 11:55:33 に仮想コントローラーがアップしています。
仮想コントローラーダウン後、約 1 分程度で別 AP (ここではAP2) にフェールオーバーして稼働開始できていることがわかります。
もっとたくさん AP がある場合、リストにAPを列挙しておくことで、ファームウェア更新などで全体の再起動が順次発生する場合
進行状態をウォッチできる可能性があります。

ネットワーク機器以外にも、サーバー再起動で ping は通るようになったがデータベースが、、、Web サーバーがまだ、、などもやもやすることがありますが、Test-MultiPing を使用するとそのあたりもウォッチ可能になります。
Active Directory ドメインコントローラーを見てみましょう。
「TestADDS.txt」の中身
# ドメインコントローラーのテスト
192.168.150.120::ADDS-Ping
192.168.150.120:3389:ADDS-RDP
192.168.150.120:53:ADDS-DNS
192.168.150.120:88:ADDS-Kerberos
192.168.150.120:135:ADDS-RPC
192.168.150.120:139:ADDS-NetBIOS
192.168.150.120:389:ADDS-LDAP
192.168.150.120:636:ADDS-LDAPSSL
192.168.150.120:3268:ADDS-LDAPGC
192.168.150.120:3269:ADDS-LDAPGCSSL
192.168.150.120:445:ADDS-SMB
このファイルを利用した Test-MultiPing の使用例

この例では、Test-MultiPing 開始後に、ドメインコントローラーを再起動してみました。
10:25:33 に完全にダウン、10:26:01 に ping 疎通復帰、10:26:07 には LDAPGC / LDAPGCSSL (グローバル カタログ用通信ポート) 以外は復帰。
10:26:35 にはすべて復帰というような流れが分かります。
このように Test-MultPing を使うと複数機器の同時ウォッチや、同一機器内のサービス起動状態などをウォッチすることができます。
留意事項としては以下の通りです。
- 疎通対象が増えると1行当たり(1回のウォッチ辺り) の必要時間が増え、各テスト間の間隔が広がります。
- 対象機器までの経路で Firewall / ACL などで遮断されていたら疎通取れないのであしからず。
- ポート 80 / 443 もしうっかりプロキシの設定の影響受けたりしたら思った結果と違うことになるかも。
- 飽くまで作業支援のツールとしてご利用を。本格的な死活監視に組み込もうなどとは思わないでください。
※そういうのはちゃんとしたツールを使いましょう。 - ExecutionPolicy 以外のところで ps1、psm1 のスクリプト実行が禁止された環境だと動かないかも・・・。
Save-Module -Name SHIMSOFT-Fundamentals -Path C:\Work などで保存して、メモ帳か何かで開いてfunction Test-MultiPing { ~~ } を PowerShell ウインドウにコピペしてその場の定義にしてしまえば使えるかもしれません。
皆様、ご興味ありましたら一度お試し下さい。