【VBA】対象PCへPingコマンドを実行する【PC死活監視】

VBAから
 ・対象PCへ
 ・Pingコマンドを実行
できます!

「WMI」を使用することで
実行できます!

「WMI」がナニモノなのか、
具体的に説明するのは難しいです…

またループ処理の中で
 ・一定間隔で
 ・繰り返しPingコマンドを実行することで
 ・PCを死活監視
できます!
※PC死活監視とは「PCが起動しているか、ネットワークに接続されているか」を確認することです。
※この記事ではPC死活監視のVBAコードは記載していません。
※この記事と参考記事を組み合わせることで、PC死活監視のVBAコードを作成できます。

PR

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

「CreateObject(“WbemScripting.SWbemLocator”)」により、「SWbemLocatorオブジェクト」を取得します(11行目)

「SWbemLocatorオブジェクト」の「ConnectServer」メソッドにより、「SWbemServicesオブジェクト」を取得します(12行目)。

対象PCを
 ・「IPアドレス」または「コンピューター名(ホスト名)」で指定
します(17行目)。
※上記では「serverhost」を指定しています。

PR

実行結果

対象PCへPingコマンドを実行し、結果を取得できました。

●対象PCが起動している かつ ネットワークに繋がっている場合
Pingが成功しました。

Ping成功
Ping成功


●対象PCが起動している かつ ネットワークに繋がっていない場合
●対象PCが起動していない場合
Pingが失敗しました。

Ping失敗
Ping失敗
Ping失敗
Ping失敗

「コンピューター名(ホスト名)」を指定してPingが失敗した場合は、「IPアドレス」を指定して実行してみてください。
※名前解決(ホスト名からIPアドレスを取得する処理)で失敗しているのかもしれません。

PR

参考①

Pingコマンドの結果をそのまま取得することもできます。

詳細は以下の記事をご確認ください。

PR

参考②

ループ処理の中で
 ・一定間隔で
 ・繰り返しPingコマンドを実行することで、
 ・PCの死活監視
ができます。

PCの死活監視をする場合、Pingコマンドを実行するたびにPingコマンドの結果を
 ・テキストファイルへログとして出力したり
 ・失敗した場合はメールで通知したり
したら良いと思います。

一定間隔で実行するためには、sleep処理が必要です。

sleep処理については、以下の記事をご確認ください。


ログの出力方法については、以下の記事をご確認ください。


メールで通知する方法については、以下の記事をご確認ください。
※メールを送信する方法は2種類あります。


PR

参考③

「WMI」の詳細については、公式サイトをご確認ください。
※見てもよく分からないかもですが

●WMI

PR

参考④

上記のVBAコードで使用した以下の詳細については、公式サイトをご確認ください。

●SWbemLocatorオブジェクト


●SWbemServicesオブジェクト

PR

参考⑤

Ping結果の詳細については、公式サイトをご確認ください。


上記によるとPing結果が
 ・「11010」は「Request Timed Out(=タイムアウト)」
 ・「11003」は「Destination Host Unreachable(=到達不可)」
です。

タイトルとURLをコピーしました