2016-11-07 9 views
1

私は、デバイスのリストを実行してpingを実行し、それらがアップしている(通信中であることを意味する)か、ダウンした(pingが成功しなかった)かを知るプロセスを自動化しようとしています。私はいくつかのチュートリアルと計画を見て、次のスクリプトにそれを作った。シェル関数からの戻り値の理解

shell機能と以下の機能の間で混乱することがあります。 retの値が0として返ってきて、pingが失敗したことが分かりました。しかしむしろ、私はそれが間違っていると思う。関数のこの問題と、戻り値を扱う方法については、誰でも私に明快さを提供することができます。もっと良いことに、私がやっていることに似た何かを創造しようと試みたことはありますか?

Sub testPing() 

    Dim WshShell 
    Set WshShell = VBA.CreateObject("WScript.Shell") 

    Dim testIP As String 
    Dim testPort As String 

    Dim yes, no As String 
    yes = "true" 
    no = "false" 

    testIP = Cells(3, 2).Value 
    testPort = Cells(3, 3).Value 

    ret = WshShell.Run("C:\Users\John.Doe\paping.exe " & testIP & " -p " & testPort & " -c 3", 0, True) 

    Debug.Print ret 

End Sub 

答えて

2

コードは次のように、隣接するセル内のIPアドレスと場所の結果の範囲を通じてThis Question

使用からこの機能

Function GetPingResult(Host) 
    Dim objPing As Object 
    Dim objStatus As Object 
    Dim Result As String 

    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}"). _ 
     ExecQuery("Select * from Win32_PingStatus Where Address = '" & Host & "'") 

    For Each objStatus In objPing 
     Select Case objStatus.StatusCode 
     Case 0: strResult = "Connected" 
     Case 11001: strResult = "Buffer too small" 
     Case 11002: strResult = "Destination net unreachable" 
     Case 11003: strResult = "Destination host unreachable" 
     Case 11004: strResult = "Destination protocol unreachable" 
     Case 11005: strResult = "Destination port unreachable" 
     Case 11006: strResult = "No resources" 
     Case 11007: strResult = "Bad option" 
     Case 11008: strResult = "Hardware error" 
     Case 11009: strResult = "Packet too big" 
     Case 11010: strResult = "Request timed out" 
     Case 11011: strResult = "Bad request" 
     Case 11012: strResult = "Bad route" 
     Case 11013: strResult = "Time-To-Live (TTL) expired transit" 
     Case 11014: strResult = "Time-To-Live (TTL) expired reassembly" 
     Case 11015: strResult = "Parameter problem" 
     Case 11016: strResult = "Source quench" 
     Case 11017: strResult = "Option too big" 
     Case 11018: strResult = "Bad destination" 
     Case 11032: strResult = "Negotiating IPSEC" 
     Case 11050: strResult = "General failure" 
     Case Else: strResult = "Unknown host" 
     End Select 
     GetPingResult = strResult 
    Next 

    Set objPing = Nothing 
End Function 

ループを適応:

Sub GetIPStatus() 
    Dim cell As Range 

    For Each cell In Worksheets("Sheet1").Range("A1:A5") 
    Result = GetPingResult(cell.Value) 
    cell.Offset(0, 1).Value = Result 
    Next cell 
End Sub 

結果

enter image description here

+0

私は、プライベートIPをredactingのいずれかのポイントがありますかわかりません。 – ThunderFrame

+0

@ThunderFrame合意しましたが、私は原則からそれをやろうと思っていました:-) –

+0

これを投稿していただきありがとうございます。 'GetObject'内のコードは何ですか? – Rivers31334