[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 再谈VBS脚本的流量计算方法

之前有发帖寻求这样的计算方法,有朋友直接贴出类似的帖子,因为不懂VBS,看了几天后VBS方面的资料后,勉强看懂了,但始终有些欠考虑的地方。
1 网卡数量并不一定为1个
2 Network_adapter与Win32_PerfRawData_Tcpip_NetworkInterface中关于name的名称其实是不相同的,特殊符号不同。
3 只计算了TCP/IP的流量,没计算UDP的
下面贴出我的想法,目前为止没去考虑UDP流量,但始终找不到好的方法,一个是算出读出带宽,另一个无法在逻辑上,计算流量的同时,排除掉非物理网卡
  1. Dim WMI
  2. Dim nicname(),outputa(),outputb(),Bandwidth()
  3. dim count,data
  4. dim i
  5. i=0
  6. count=0
  7. Set WMI = GetObject("winmgmts:\\.\root\cimv2")
  8. set data=WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface")
  9. For Each objItem In  data
  10.     count=count+1
  11. Next
  12. Redim outputa(count-1),outputb(count-1),nicname(count-1),Bandwidth(count-1)
  13. For Each objItem In  data
  14.    nicname(i) = objItem.name
  15.    Bandwidth(i)=objitem.CurrentBandwidth
  16.    i=i+1
  17. Next
  18. i=0
  19. set data=WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface")
  20. for each objdata in data
  21.      outputa(i)=objdata.BytesTotalPersec
  22.      i=i+1
  23. next
  24. i=0
  25. wscript.Sleep(1000)
  26. set data=wmi.execquery("select * from Win32_PerfRawData_Tcpip_NetworkInterface ")
  27. for each objdatb in data
  28.       outputb(i)=objdatb.BytesTotalPersec
  29.       i=i+1
  30. next
  31. for i=0 to (count-1)
  32. WScript.Echo nicname(i)&" "&"CurrentBandwidth is: "&(Bandwidth(i)/8/1024/1024)&" Mbps"
  33. Wscript.echo nicname(i)&" "&"speed is: "&((outputb(i)-outputa(i))/1024/1024)&" Mbps"
  34. If Bandwidth(i)<>0 Then Wscript.echo nicname(i)&" "&"Bandwidth Usage is: "&FormatNumber((outputb(i)-outputa(i))/(Bandwidth(i)/8),2,-1)&" %"
  35. next
复制代码
这个方法,有几点问题,一个是当前带宽好像不对,但我也找不到到其他类来计算了。二是,这里没有排除掉非物理网卡(这些类把一些协议也算进去了),可以用Ipenable或者PhysicalMacadress来排除,但无法与后面的PerfRawData_Tcpip_NetworkInterface保持连接来筛选,因为name中的特殊符号有区别。
有没有高人指点的?

返回列表