excelでネットワーク管理

先日フォルダ構成をexcelで抽出するスクリプトを書いていて,pingとかsnmpexcelでできたらな便利かなと思いました.んで,ちょっと探して見つかったのがSystem Scripting RuntimeというActiveX Component.SScrRun.dllを適当な場所にコピーして,"RegSvr32.exe SScrRun.dll" とコマンドすれば利用可能になります.これを使ったpingのサンプルはこんな感じ

sub Ping()
  Set oIPNetwork = CreateObject("SScripting.IPNetwork")
  Cnt = ThisWorkbook.ActiveSheet.UsedRange.Rows.Count
  For i = 1 To Cnt
    Target = ThisWorkbook.ActiveSheet.Cells(i, 1)
    Result = oIPNetwork.Ping(Target, ResponseTime)
    If Result = 0 Then
      ThisWorkbook.ActiveSheet.Cells(i, 4) = ResponseTime
    Else
      ThisWorkbook.ActiveSheet.Cells(i, 4) = "No response"
    End If
  Next
End Sub

同様にsnmp getを実行してみるサンプルはこんな感じ

Sub GetDescriptor()
  Set oSNMPManager = CreateObject("SScripting.SNMPManager")
  oSNMPManager.Community = "public"
  Call oSNMPManager.Variables.Add("1.3.6.1.2.1.1.1.0")
  Cnt = ThisWorkbook.ActiveSheet.UsedRange.Rows.Count
  For i = 1 To Cnt
    Target = ThisWorkbook.ActiveSheet.Cells(i, 1)
    oSNMPManager.Agent = Target
    Result = oSNMPManager.Get
    If Result = 0 Then
      For Each SNMPVariable In oSNMPManager.Variables
        ThisWorkbook.ActiveSheet.Cells(i, 5) = SNMPVariable.Value
    Next
    Else
      ThisWorkbook.ActiveSheet.Cells(i, 5) = Result
    End If
  Next

書いてみて気がついたんだけど,これだけだと使い物になりません.タイムアウトするまでの時間がかかるので,下手にネットワークが繋がらない所で実行すると,タスクマネージャーからプロセスを落とすしかなくなってしまいます.マクロを実行するときに,ボタンを表示しておいて,押したら強制終了するとかってロジックが必要そうです.