VBAから
・対象PCへ
・Pingコマンドを実行
できます!
「WMI」を使用することで
実行できます!
「WMI」がナニモノなのか、
具体的に説明するのは難しいです…
またループ処理の中で
・一定間隔で
・繰り返しPingコマンドを実行することで
・PCを死活監視
できます!
※PC死活監視とは「PCが起動しているか、ネットワークに接続されているか」を確認することです。
※この記事ではPC死活監視のVBAコードは記載していません。
※この記事と参考記事を組み合わせることで、PC死活監視のVBAコードを作成できます。
VBAコード
ここでは例として、
・コンピューター名(ホスト名)が「serverhost」のPCへ
・Pingコマンドを実行して結果を取得
します。
※「serverhost」は私のネットワーク上に存在するPCの「コンピューター名(ホスト名)」です。
'変数の宣言を必須
Option Explicit
Sub sample()
Dim objLocator As Object
Dim objServer As Object
Dim objPingSet As Object
Dim ping As Object
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objServer = objLocator.ConnectServer()
'対象PCを指定
'対象PCはIPアドレス or コンピューター名(ホスト名)で指定
Set objPingSet = objServer.ExecQuery _
("Select * From Win32_PingStatus Where Address = 'serverhost'")
'Pingの実行と結果を取得
For Each ping In objPingSet
Select Case ping.StatusCode
Case 0
MsgBox ("Ping成功")
Case 11010
MsgBox ("Ping失敗【タイムアウト】")
Case 11003
MsgBox ("Ping失敗【到達不可】")
Case Else
MsgBox ("Ping失敗")
End Select
Next
'後片付け
Set objLocator = Nothing
Set objServer = Nothing
Set objPingSet = Nothing
End Sub
実行結果
対象PCへPingコマンドを実行し、結果を取得できました。
●対象PCが起動している かつ ネットワークに繋がっている場合
Pingが成功しました。
●対象PCが起動している かつ ネットワークに繋がっていない場合
●対象PCが起動していない場合
Pingが失敗しました。
参考①
Pingコマンドの結果をそのまま取得することもできます。
詳細は以下の記事をご確認ください。
参考②
ループ処理の中で
・一定間隔で
・繰り返しPingコマンドを実行することで、
・PCの死活監視
ができます。
PCの死活監視をする場合、Pingコマンドを実行するたびにPingコマンドの結果を
・テキストファイルへログとして出力したり
・失敗した場合はメールで通知したり
したら良いと思います。
一定間隔で実行するためには、sleep処理が必要です。
sleep処理については、以下の記事をご確認ください。
ログの出力方法については、以下の記事をご確認ください。
メールで通知する方法については、以下の記事をご確認ください。
※メールを送信する方法は2種類あります。
参考③
PCではなく、Webサイトの死活監視もできます。
詳細は以下の記事をご確認ください。
参考④
「WMI」の詳細は、公式サイトをご確認ください。
※見てもよく分からないかもですが。
●WMI
参考⑤
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●SWbemLocatorオブジェクト
●SWbemServicesオブジェクト
参考⑥
Ping結果の詳細は、公式サイトをご確認ください。
上記によるとPing結果が
・「11010」は「Request Timed Out(=タイムアウト)」
・「11003」は「Destination Host Unreachable(=到達不可)」
です。