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