ページ

2010年4月22日木曜日

VBScript - Pingの実行

ネットワークの死活監視
先日組んだNetScreenじゃないけどどうもネットワークが不安定らしい。

ネットワークのログを取ることと、現状のステータスを確認することを目的として

スクリプトを組んだので参考になれば幸。

ネットワークの死活はPingを飛ばすことで確認する。

Windows2003Server と Windows2000Professional で確認。

XP用を2000のPCで実行したらエラーになって、

よくよく調べてみると("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2")は2000では使えなかった。

なのでPingコマンドの応答から結果を得るもの。

WindowsXP以降用
Function PingResult(ByVal strTargetComputer) 'PingResultにpingを行って成功したらPingResultにTrueを返す
    Dim objWMIService
    Dim colItems
    Dim objItem

    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_PingStatus " & _
    "Where Address = '" & strTargetComputer & "'")
    For Each objItem in colItems
        If objItem.StatusCode = 0 Then
            PingResult = True
        Else
            PingResult = False
        End If
    Next
    Set objWMIService = Nothing
    Set colItems = Nothing
End Function

Windows 2k用
Function PingResult_2k(ByVal strTargetComputer) '2kは\\.\root\cimv2に対応していない
    Set objWS = CreateObject("WScript.Shell")
    Set objExecObject = objWS.Exec("%comspec% /c ping -n 3 -w 1000 " & strTargetComputer)
    Do While Not objExecObject.StdOut.AtEndOfStream
        strText = objExecObject.StdOut.ReadAll()
        If Instr(strText, "TTL") > 0 Then
            PingResult_2k = True
        Else
            PingResult_2k = False
        End If
    Loop
End Function

0 件のコメント:

コメントを投稿