经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Windows » 查看文章
磁盘IO利用率监控VBS脚本(windows)
来源:jb51  时间:2019/10/24 9:03:13  对本文有异议

核心代码

  1. '程序名称:      btlwchk_DiskIO.vbs
  2. '版权信息:      Copyright (c)  2011 guangzhou bluetech technology Incorporated.All rights reserved
  3. '程序用途:      监测windows主机IO利用率
  4. '创建日期:      2011-08-10
  5. '作者信息:      zhangkai
  6. '运行环境:      vbs
  7. '处理参数
  8. MonSubject="DiskIO"
  9. Set Args=WScript.Arguments
  10. If (Args.Count<1) Then
  11.  Wscript.Echo MonSubject & " -1:command line error"
  12.  WScript.Quit(3)
  13. End If
  14. strcid=Args(0)
  15. '获取工作目录
  16. tmparr=Split(Wscript.ScriptFullName,"\",-1)
  17. g_strworkdir=tmparr(0)
  18. narr=UBound(tmparr,1)
  19. For i=1 to narr-3
  20.     g_strworkdir=g_strworkdir & "\" & tmparr(i)
  21. Next
  22. '装载公共库
  23. set g_fileSys = createObject ("Scripting.FileSystemObject")
  24. Sub includeFile (fSpec)
  25.     dim file, fileData
  26.     set file = g_fileSys.openTextFile (fSpec)
  27.     fileData = file.readAll ()
  28.     file.close
  29.     executeGlobal fileData
  30.     set file = nothing 
  31. end sub
  32. includeFile g_strworkdir & "\nagios\libexec\libcomm.vbs"
  33.  
  34. '输出版本和帮助信息
  35. getverhelp strcid,"v1.00"," <cid>"
  36.  
  37. strComputer = "."  
  38. Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
  39.  
  40. '第1次采样IO
  41. Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_LogicalDisk where name='_Total' ",,48)
  42. For Each objItem in colItems
  43.      DiskTime1 = objItem.PercentDiskTime
  44.      BaseTime1 = objItem.PercentDiskTime_Base
  45.   DiskBytes1 = objItem.DiskBytesPerSec
  46.   DiskReadBytes1 = objItem.DiskReadBytesPerSec
  47.   DiskWriteBytes1 = objItem.DiskWriteBytesPerSec
  48.   AvgDiskTransfer1 = objItem.AvgDiskSecPerTransfer
  49.   AvgDiskTransferBase1 = objItem.AvgDiskSecPerTransfer_Base
  50.   AvgDiskRead1 = objItem.AvgDiskSecPerRead
  51.   AvgDiskReadBase1 = objItem.AvgDiskSecPerRead_Base
  52.   AvgDiskWrite1 = objItem.AvgDiskSecPerWrite
  53.   AvgDiskWriteBase1 = objItem.AvgDiskSecPerWrite_Base
  54.   TimeValue1 = objItem.Timestamp_PerfTime
  55.   TimeBase = objItem.Frequency_PerfTime
  56.  
  57. Next
  58.  
  59. '2次采样IO
  60. WScript.Sleep 1000
  61. Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_LogicalDisk where name='_Total' ",,48)
  62. For Each objItem in colItems
  63.      DiskTime2 = objItem.PercentDiskTime
  64.   BaseTime2 = objItem.PercentDiskTime_Base
  65.   DiskBytes2 = objItem.DiskBytesPerSec
  66.   DiskReadBytes2 = objItem.DiskReadBytesPerSec
  67.   DiskWriteBytes2 = objItem.DiskWriteBytesPerSec
  68.   AvgDiskTransfer2 = objItem.AvgDiskSecPerTransfer
  69.   AvgDiskTransferBase2 = objItem.AvgDiskSecPerTransfer_Base
  70.   AvgDiskRead2 = objItem.AvgDiskSecPerRead
  71.   AvgDiskReadBase2 = objItem.AvgDiskSecPerRead_Base
  72.   AvgDiskWrite2 = objItem.AvgDiskSecPerWrite
  73.   AvgDiskWriteBase2 = objItem.AvgDiskSecPerWrite_Base
  74.   TimeValue2 = objItem.Timestamp_PerfTime
  75.         CurrentDiskQueueLength = objItem.CurrentDiskQueueLength
  76. Next
  77.  
  78. '获取IO利用率
  79. If BaseTime2 - BaseTime1 = 0 Then
  80.  strio ="Name=_Toltal"  & ",PercentDiskTime=0%"
  81. Else
  82.  PercentDiskTime =(DiskTime2 - DiskTime1)/(BaseTime2 - BaseTime1)*100 
  83.  strio = "Name=_Total"  & ",PercentDiskTime="  & PercentDiskTime
  84. End If
  85.  
  86. '获取Disk Bytes/sec
  87. If TimeValue2 - TimeValue1 = 0 Then
  88.     strdiskbyte = ",DiskBytesPerSec=0"
  89. Else
  90.     DiskBytesPerSec = (DiskBytes2 - DiskBytes1) / ( (TimeValue2 - TimeValue1) / TimeBase)
  91.     strdiskbyte = ",DiskBytesPerSec="  & DiskBytesPerSec
  92. End If
  93.  
  94. '获取Disk Read Bytes/sec
  95. If TimeValue2 - TimeValue1 = 0 Then
  96.     strdiskreadbyte = ",DiskReadBytesPerSec=0"
  97. Else
  98.     DiskReadBytesPerSec = (DiskReadBytes2 - DiskReadBytes1) / ( (TimeValue2 - TimeValue1) / TimeBase)
  99.     strdiskreadbyte = ",DiskReadBytesPerSec="  & DiskReadBytesPerSec
  100. End If
  101.  
  102. '获取Disk Write Bytes/sec
  103. If TimeValue2 - TimeValue1 = 0 Then
  104.     strdiskwritebyte = ",DiskWriteBytesPerSec=0"
  105. Else
  106.     DiskWriteBytesPerSec = (DiskWriteBytes2 - DiskWriteBytes1) / ( (TimeValue2 - TimeValue1) / TimeBase)
  107.     strdiskwritebyte = ",DiskWriteBytesPerSec="  & DiskWriteBytesPerSec
  108. End If
  109.  
  110. '获取Avg. Disk sec/Transfer
  111. If AvgDiskTransferBase2 - AvgDiskTransferBase1 = 0 Then
  112.     stravgdisktran = ",AvgDiskSecPerTransfer=0"
  113. Else
  114.     AvgDiskSecPerTransfer = ((AvgDiskTransfer2 - AvgDiskTransfer1) / TimeBase) / (AvgDiskTransferBase2 - AvgDiskTransferBase1)
  115.     stravgdisktran = ",AvgDiskSecPerTransfer="  & AvgDiskSecPerTransfer
  116. End If
  117.  
  118. '获取Avg. Disk sec/Read
  119. If AvgDiskReadBase2 - AvgDiskReadBase1 = 0 Then
  120.     stravgdiskread = ",AvgDiskSecPerRead=0"
  121. Else
  122.     AvgDiskSecPerRead = ((AvgDiskRead2 - AvgDiskRead1) / TimeBase) / (AvgDiskReadBase2 - AvgDiskReadBase1)
  123.     stravgdiskread = ",AvgDiskSecPerRead="  & AvgDiskSecPerRead
  124. End If
  125.  
  126. '获取Avg. Disk sec/Write
  127. If AvgDiskWriteBase2 - AvgDiskWriteBase1 = 0 Then
  128.     stravgdiskwrite = ",AvgDiskSecPerWrite=0"
  129. Else
  130.     AvgDiskSecPerWrite = ((AvgDiskWrite2 - AvgDiskWrite1) / TimeBase) / (AvgDiskWriteBase2 - AvgDiskWriteBase1)
  131.     stravgdiskwrite = ",AvgDiskSecPerWrite="  & AvgDiskSecPerWrite
  132. End If
  133.  
  134. '获取Current Disk Queue Length
  135. strdisklength = ",CurrentDiskQueueLength="  & CurrentDiskQueueLength
  136.  
  137. Wscript.Echo MonSubject & " 0:OK|" & strio & strdiskbyte & strdiskreadbyte & strdiskwritebyte & stravgdisktran & stravgdiskread & stravgdiskwrite & strdisklength

用到了WMI,需要的朋友可以参考一下

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号