标题: [问题求助] 再谈VBS脚本的流量计算方法 [打印本页]
作者: wodesitanfu 时间: 2012-8-6 20:28 标题: 再谈VBS脚本的流量计算方法
之前有发帖寻求这样的计算方法,有朋友直接贴出类似的帖子,因为不懂VBS,看了几天后VBS方面的资料后,勉强看懂了,但始终有些欠考虑的地方。
1 网卡数量并不一定为1个
2 Network_adapter与Win32_PerfRawData_Tcpip_NetworkInterface中关于name的名称其实是不相同的,特殊符号不同。
3 只计算了TCP/IP的流量,没计算UDP的
下面贴出我的想法,目前为止没去考虑UDP流量,但始终找不到好的方法,一个是算出读出带宽,另一个无法在逻辑上,计算流量的同时,排除掉非物理网卡- Dim WMI
- Dim nicname(),outputa(),outputb(),Bandwidth()
- dim count,data
- dim i
- i=0
- count=0
-
- Set WMI = GetObject("winmgmts:\\.\root\cimv2")
- set data=WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface")
- For Each objItem In data
- count=count+1
- Next
-
- Redim outputa(count-1),outputb(count-1),nicname(count-1),Bandwidth(count-1)
- For Each objItem In data
- nicname(i) = objItem.name
- Bandwidth(i)=objitem.CurrentBandwidth
- i=i+1
- Next
-
- i=0
- set data=WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface")
- for each objdata in data
- outputa(i)=objdata.BytesTotalPersec
- i=i+1
- next
-
- i=0
- wscript.Sleep(1000)
- set data=wmi.execquery("select * from Win32_PerfRawData_Tcpip_NetworkInterface ")
- for each objdatb in data
- outputb(i)=objdatb.BytesTotalPersec
- i=i+1
- next
-
- for i=0 to (count-1)
- WScript.Echo nicname(i)&" "&"CurrentBandwidth is: "&(Bandwidth(i)/8/1024/1024)&" Mbps"
- Wscript.echo nicname(i)&" "&"speed is: "&((outputb(i)-outputa(i))/1024/1024)&" Mbps"
- If Bandwidth(i)<>0 Then Wscript.echo nicname(i)&" "&"Bandwidth Usage is: "&FormatNumber((outputb(i)-outputa(i))/(Bandwidth(i)/8),2,-1)&" %"
- next
复制代码
这个方法,有几点问题,一个是当前带宽好像不对,但我也找不到到其他类来计算了。二是,这里没有排除掉非物理网卡(这些类把一些协议也算进去了),可以用Ipenable或者PhysicalMacadress来排除,但无法与后面的PerfRawData_Tcpip_NetworkInterface保持连接来筛选,因为name中的特殊符号有区别。
有没有高人指点的?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |