磁盘IO利用率监控VBS脚本(windows)

所属分类: 脚本专栏 / vbs 阅读数: 783
收藏 0 赞 0 分享

核心代码

'程序名称:      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,需要的朋友可以参考一下

更多精彩内容其他人还在看

vbscript Split函数用法详解(字符串转数组函数)

本文详细介绍了vbscript中split函数的用法,有关split函数的一些实例,vbscript中split函数的语法介绍,有需要的朋友参考下
收藏 0 赞 0 分享

VBS实现将Excel表格保存为txt文本

希望能够找到个能给excel表另存为TXT的VBS代码,虽然另存为可以选择,但还是需要直接VBS执行这一步另存为TXT格式的,应该如何写代码呢
收藏 0 赞 0 分享

vbs解决处理TXT文本数据相关问题实现代码

使用vbs处理txt数据时,会遇到一些问题,本文将提供详细的解决方法,希望可以帮助你们
收藏 0 赞 0 分享

关于vbs 生成静态页面过程中出现的问题

访问某个aspx页面,然后把服务器返回的页面以filestream 的形式保存为html格式,接下来将介绍实现代码
收藏 0 赞 0 分享

dim函数第三个参数设置截取字符的长度问题

dim函数的第三个参数,也就是截取字符的长度,我在设置这个的时候,出了些问题,提示无效的过程调用或参数,本文详细介绍如何解决
收藏 0 赞 0 分享

邪恶的eval和new Function使用介绍

这些代码可以干什么?可以肯定的是可以干很多猥琐的事
收藏 0 赞 0 分享

WScript.Shell对象SpecialFolders属性未公开文档分享

WshShell对象的SpecialFolders属性返WshSpecialFolders 对象,该对象是一个特殊文件夹集合,其中包含整套Windows特殊文件夹
收藏 0 赞 0 分享

用VBS修改(设置)系统时间和日期的代码

用 VBS 把系统的时间修改到2038年1月19日3时14分07秒之后,这样某些依赖于 Unix 时间戳的程序就会出问题。那么怎样用 VBS 修改系统的时间呢
收藏 0 赞 0 分享

VBS For Next循环的一些细节

For Next 语句是 VBS 中常用的循环语句,你可能已经用过无数次 For Next 循环,但是你是否注意过它的一些细节呢
收藏 0 赞 0 分享

VBS For Next循环的陷阱分享

在《VBS For Next循环的一些细节》中说到了 For Next 循环的控制变量仅仅在循环开始前求值一次,但是其中存在一处陷阱
收藏 0 赞 0 分享
查看更多