excelでネットワーク管理
先日フォルダ構成をexcelで抽出するスクリプトを書いていて,pingとかsnmpもexcelでできたらな便利かなと思いました.んで,ちょっと探して見つかったのが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
書いてみて気がついたんだけど,これだけだと使い物になりません.タイムアウトするまでの時間がかかるので,下手にネットワークが繋がらない所で実行すると,タスクマネージャーからプロセスを落とすしかなくなってしまいます.マクロを実行するときに,ボタンを表示しておいて,押したら強制終了するとかってロジックが必要そうです.