1. '程序名称:      btlwchk_netinterface.vbs  
  2.  
  3. '版权信息:      Copyright (c)  2011 guangzhou bluetech technology Incorporated.All rights reserved  
  4. '程序用途:      监测windows主机网络接口利用率  
  5. '创建日期:      2011-09-1  
  6. '作者信息:      zhangkai  
  7. '运行环境:      vbs  
  8. '处理参数  
  9.  
  10. MonSubject="NetInterface" 
  11. Set Args=WScript.Arguments  
  12. If (Args.Count<1) Then 
  13.  Wscript.Echo MonSubject & " -1:command line error" 
  14.  WScript.Quit(3)  
  15. End If 
  16. strcid=Args(0)  
  17. '获取工作目录  
  18. tmparr=Split(Wscript.ScriptFullName,"\",-1)  
  19. g_strworkdir=tmparr(0)  
  20. narr=UBound(tmparr,1)  
  21. For i=1 to narr-3  
  22.     g_strworkdir=g_strworkdir & "\" & tmparr(i)  
  23. Next 
  24. '装载公共库  
  25. set g_fileSys = createObject ("Scripting.FileSystemObject")  
  26. Sub includeFile (fSpec)  
  27.     dim file, fileData  
  28.     set file = g_fileSys.openTextFile (fSpec)  
  29.     fileData = file.readAll ()  
  30.     file.close  
  31.     executeGlobal fileData  
  32.     set file = nothing   
  33. end sub  
  34. includeFile g_strworkdir & "\nagios\libexec\libcomm.vbs" 
  35.  
  36.  
  37. '输出版本和帮助信息  
  38. getverhelp strcid,"v1.00"," <cid>" 
  39.  
  40. strComputer = "."    
  41. Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")   
  42.  
  43. '第1次采样  
  44. Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface",,48)  
  45. Dim BytesTotalPersec1(20),TimeValue1(20),Name1(20),CurrentBandwidth(20),BytesReceivedPerSec1(20),BytesSentPerSec1(20),PacketsReceivedPerSec1(20),PacketsSentPerSec1(20),_  
  46. BytesTotalPersec(20),PercentNetwork(20),BytesReceivedPerSec(20),BytesSentPerSec(20),PacketsReceivedPerSec(20),PacketsSentPerSec(20)  
  47. n=0  
  48. For Each objItem in colItems  
  49.   Name1(n) = objItem.Name  
  50.   BytesTotalPersec1(n) = objItem.BytesTotalPersec  
  51.   BytesReceivedPerSec1(n) = objItem.BytesReceivedPerSec  
  52.   BytesSentPerSec1(n) = objItem.BytesSentPerSec  
  53.   PacketsReceivedPerSec1(n) = objItem.PacketsReceivedPerSec  
  54.   PacketsSentPerSec1(n) = objItem.PacketsSentPerSec  
  55.   TimeValue1(n) = objItem.Timestamp_PerfTime  
  56.   CurrentBandwidth(n) = objItem.CurrentBandwidth  
  57.   TimeBase = objItem.Frequency_PerfTime  
  58.   n=n+1  
  59. Next 
  60.  
  61. '第2次采样  
  62. WScript.Sleep 1000  
  63. Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface",,48)  
  64. Dim BytesTotalPersec2(20),TimeValue2(20),Name2(20),BytesReceivedPerSec2(20),BytesSentPerSec2(20),PacketsReceivedPerSec2(20),PacketsSentPerSec2(20)  
  65. k=0  
  66. For Each objItem in colItems  
  67.   Name2(k) = objItem.Name  
  68.      BytesTotalPersec2(k) = objItem.BytesTotalPersec  
  69.   BytesReceivedPerSec2(k) = objItem.BytesReceivedPerSec  
  70.   BytesSentPerSec2(k) = objItem.BytesSentPerSec  
  71.   PacketsReceivedPerSec2(k) = objItem.PacketsReceivedPerSec  
  72.   PacketsSentPerSec2(k) = objItem.PacketsSentPerSec  
  73.   TimeValue2(k) = objItem.Timestamp_PerfTime  
  74.   k=k+1  
  75. Next 
  76.  
  77. j=0  
  78. For i=0 to n-1  
  79.  If TimeValue2(j) - TimeValue1(j) = 0 Then 
  80.   strnetwork = "BytesTotalPersec=0" 
  81.  Else 
  82.   '带宽利用率= (BytesReceivedPerSec + BytesSentPerSec)*8*100/ CurrentBandwidth  
  83.   '计算利用率  
  84.   BytesTotalPersec(j) = (BytesTotalPersec2(j) - BytesTotalPersec1(j)) / ((TimeValue2(j) - TimeValue1(j)) / TimeBase)  
  85.   PercentNetwork(j) = BytesTotalPersec(j)*8*100 / CurrentBandwidth(j)  
  86.   PercentNetwork(j) = round(PercentNetwork(j),2)  
  87.     
  88.   '计算BytesReceivedPerSec  
  89.   BytesReceivedPerSec(j) = (BytesReceivedPerSec2(j) - BytesReceivedPerSec1(j)) / ((TimeValue2(j) - TimeValue1(j)) / TimeBase)/1024  
  90.   BytesReceivedPerSec(j) = round(BytesReceivedPerSec(j),2)  
  91.     
  92.   '计算BytesSentPerSec  
  93.   BytesSentPerSec(j) = (BytesSentPerSec2(j) - BytesSentPerSec1(j)) / ((TimeValue2(j) - TimeValue1(j)) / TimeBase)/1024  
  94.   BytesSentPerSec(j) = round(BytesSentPerSec(j),2)  
  95.     
  96.   '计算PacketsReceivedPerSec  
  97.   PacketsReceivedPerSec(j) = (PacketsReceivedPerSec2(j) - PacketsReceivedPerSec1(j)) / ((TimeValue2(j) - TimeValue1(j)) / TimeBase)  
  98.   PacketsReceivedPerSec(j) = round(PacketsReceivedPerSec(j),2)  
  99.     
  100.   '计算PacketsSentPerSec  
  101.   PacketsSentPerSec(j) = (PacketsSentPerSec2(j) - PacketsSentPerSec1(j)) / ((TimeValue2(j) - TimeValue1(j)) / TimeBase)  
  102.   PacketsSentPerSec(j) = round(PacketsSentPerSec(j),2)  
  103.     
  104.   '计算CurrentBandwidth  
  105.   CurrentBandwidth(j) = CInt(CurrentBandwidth(j)/1000/1000)  
  106.  End If 
  107.  If j = 0 Then 
  108.   Wscript.Echo MonSubject & " 0:OK|Name=" & Name1(j) & ",PercentNetwork=" & PercentNetwork(j) & ",BytesReceivedPerSec=" & BytesReceivedPerSec(j) & ",BytesSentPerSec=" & BytesSentPerSec(j) _  
  109.   & ",PacketsReceivedPerSec=" & PacketsReceivedPerSec(j) & ",PacketsSentPerSec=" & PacketsSentPerSec(j) & ",CurrentBandwidth=" & CurrentBandwidth(j)  
  110.  End If 
  111.  'Wscript.Echo MonSubject & " 0:OK|" & Name1(j) & ",PercentNetwork=" & PercentNetwork  
  112.  j=j+1  
  113. Next