Contact Info

Crumbtrail

ActiveXperts.com » Administration » VBScript Collection » Storage » Disk Drives and Volumes » Monitoring

Scripts to Monitor Disks and Volumes

Monitor Available Disk Space
Monitor Disk Bytes Per Second
Monitor Disk Drive Free Space
Monitor Logical Disk Drive Performance
Monitor Logical Disk Performance
Monitor Physical Disk Drive Performance
Monitor Physical Disk Performance
Monitor Volume Change Events


You can use any of the VBScript programs below in ActiveXperts Network Monitor. Click here for an explanation about how to include scripts in ActiveXperts Network Monitor.



Monitor Available Disk Space


Issues an alert if free disk space for any hard drive on a computer falls below 100 megabytes.
Const LOCAL_HARD_DISK = 3

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colMonitoredDisks = objWMIService.ExecNotificationQuery _
    ("Select * from __instancemodificationevent within 30 where " _
        & "TargetInstance isa 'Win32_LogicalDisk'")
i = 0

Do While i = 0
    Set objDiskChange = colMonitoredDisks.NextEvent
    If objDiskChange.TargetInstance.DriveType = LOCAL_HARD_DISK Then
        If objDiskChange.TargetInstance.Size < 100000000 Then
            Wscript.Echo "Hard disk space is below 100000000 bytes."
        End If
    End If
Loop
	

Monitor Disk Bytes Per Second


Uses cooked performance counters to monitor disk bytes per second on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colDiskDrives = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_PerfDisk_LogicalDisk").objectSet
objRefresher.Refresh

For i = 1 to 500
    For Each objDiskDrive in colDiskDrives
        Wscript.Echo "Drive name: " & objDiskDrive.Name
        Wscript.Echo "Disk bytes per second: " & objDiskDrive.DiskBytesPerSec
        Wscript.Sleep 2000
        objRefresher.Refresh
    Next
Next
	

Monitor Disk Drive Free Space


Uses cooked performance counters to retrieve free disk space on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colDiskDrives = objWMIService.ExecQuery _
    ("Select * from Win32_PerfFormattedData_PerfDisk_LogicalDisk Where " _
        & "Name <> '_Total'")

For Each objDiskDrive in colDiskDrives
    Wscript.Echo "Drive Name: " & objDiskDrive.Name
    Wscript.Echo "Free Space: " & objDiskDrive.FreeMegabytes
Next
	

Monitor Logical Disk Drive Performance


Uses cooked performance counters to monitor performance of the logical disk drives installed on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colDisks = objRefresher.AddEnum _
    (objWMIService, "win32_perfformatteddata_perfdisk_logicaldisk"). _
        objectSet
objRefresher.Refresh

For i = 1 to 100
    For Each objDisk in colDisks
        Wscript.Echo "Average Disk Bytes Per Read: " & _
            objDisk.AvgDiskBytesPerRead
        Wscript.Echo "Average Disk Bytes Per Transfer: " & _
            objDisk.AvgDiskBytesPerTransfer
        Wscript.Echo "Average Disk Bytes Per Write: " & _
            objDisk.AvgDiskBytesPerWrite
        Wscript.Echo "Average Disk Queue Length: " & _
            objDisk.AvgDiskQueueLength
        Wscript.Echo "Average Disk Read Queue Length: " & _
            objDisk.AvgDiskReadQueueLength
        Wscript.Echo "Average Disk Seconds Per Read: " & _
            objDisk.AvgDiskSecPerRead
        Wscript.Echo "Average Disk Seconds Per Transfer: " & _
            objDisk.AvgDiskSecPerTransfer
        Wscript.Echo "Average Disk Seconds Per Write: " & _
            objDisk.AvgDiskSecPerWrite
        Wscript.Echo "Average Disk Write Queue Length: " & _
            objDisk.AvgDiskWriteQueueLength
        Wscript.Echo "Current Disk Queue Length: " & _
            objDisk.CurrentDiskQueueLength
        Wscript.Echo "Disk Bytes Per Second: " & _
            objDisk.DiskBytesPerSec
        Wscript.Echo "Disk Read Bytes Per Second: " & _
            objDisk.DiskReadBytesPerSec
        Wscript.Echo "Disk Reads Per Second: " & _
            objDisk.DiskReadsPerSec
        Wscript.Echo "Disk Transfers Per Second: " & _
            objDisk.DiskTransfersPerSec
        Wscript.Echo "Disk Write Bytes Per Second: " & _
            objDisk.DiskWriteBytesPerSec
        Wscript.Echo "Disk Writes Per Second: " & _
            objDisk.DiskWritesPerSec
        Wscript.Echo "Free Megabytes: " & objDisk.FreeMegabytes
        Wscript.Echo "Name: " & objDisk.Name
        Wscript.Echo "Percent Disk Read Time: " &  _
            objDisk.PercentDiskReadTime
        Wscript.Echo "Percent Disk Time: " & _
            objDisk.PercentDiskTime
        Wscript.Echo "Percent Disk Write Time: " & _
            objDisk.PercentDiskWriteTime
        Wscript.Echo "Percent Free Space: " & _
            objDisk.PercentFreeSpace
        Wscript.Echo "Percent Idle Time: " & _
            objDisk.PercentIdleTime
        Wscript.Echo "Split IO Per Second: " & _
            objDisk.SplitIOPerSec
        Wscript.Sleep 2000
        objRefresher.Refresh
    Next
Next
	

Monitor Logical Disk Performance


Uses cooked performance counters to monitor logical disk performance.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_PerfDisk_LogicalDisk").objectSet
objRefresher.Refresh

For i = 1 to 5
    For Each objItem in colItems
        Wscript.Echo "Average Disk Bytes Per Read: " & _
            objItem.AvgDiskBytesPerRead
        Wscript.Echo "Average Disk Bytes Per Transfer: " & _
            objItem.AvgDiskBytesPerTransfer
        Wscript.Echo "Average Disk Bytes Per Write: " & _
            objItem.AvgDiskBytesPerWrite
        Wscript.Echo "Average Disk Queue Length: " & objItem.AvgDiskQueueLength
        Wscript.Echo "Average Disk Read Queue Length: " & _
            objItem.AvgDiskReadQueueLength
        Wscript.Echo "Average Disk Seconds Per Read: " & _
            objItem.AvgDisksecPerRead
        Wscript.Echo "Average Disk Seconds Per Transfer: " & _
            objItem.AvgDisksecPerTransfer
        Wscript.Echo "Average Disk Seconds Per Write: " & _
            objItem.AvgDisksecPerWrite
        Wscript.Echo "Average Disk Write Queue Length: " & _
            objItem.AvgDiskWriteQueueLength
        Wscript.Echo "Caption: " & objItem.Caption
        Wscript.Echo "Current Disk Queue Length: " & _
            objItem.CurrentDiskQueueLength
        Wscript.Echo "Description: " & objItem.Description
        Wscript.Echo "Disk Bytes Per Second: " & objItem.DiskBytesPersec
        Wscript.Echo "Disk Read Bytes Per Second: " & _
            objItem.DiskReadBytesPersec
        Wscript.Echo "Disk Reads Per Second: " & objItem.DiskReadsPersec
        Wscript.Echo "Disk Transfers Per Second: " & _
            objItem.DiskTransfersPersec
        Wscript.Echo "Disk Write Bytes Per Second: " & _
            objItem.DiskWriteBytesPersec
        Wscript.Echo "Disk Writes Per Second: " & objItem.DiskWritesPersec
        Wscript.Echo "Free Megabytes: " & objItem.FreeMegabytes
        Wscript.Echo "Name: " & objItem.Name
        Wscript.Echo "Percent Disk Read Time: " & objItem.PercentDiskReadTime
        Wscript.Echo "Percent Disk Time: " & objItem.PercentDiskTime
        Wscript.Echo "Percent Disk Write Time: " & _
            objItem.PercentDiskWriteTime
        Wscript.Echo "Percent Free Space: " & objItem.PercentFreeSpace
        Wscript.Echo "Percent Idle Time: " & objItem.PercentIdleTime
        Wscript.Echo "Split I/O Per Second: " & objItem.SplitIOPerSec
        Wscript.Sleep 2000
        objRefresher.Refresh
    Next
Next
	

Monitor Physical Disk Drive Performance


Uses cooked performance counters to monitor performance of the physical disk drives installed on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colDisks = objRefresher.AddEnum _
    (objWMIService, "win32_perfformatteddata_perfdisk_physicaldisk"). _
        objectSet
objRefresher.Refresh

For i = 1 to 100
    For Each objDisk in colDisks
        Wscript.Echo "Average Disk Bytes Per Read: " & vbTab &  _
            objDisk.AvgDiskBytesPerRead
        Wscript.Echo "Average Disk Bytes Per Transfer: " & vbTab &  _
            objDisk.AvgDiskBytesPerTransfer
        Wscript.Echo "Average Disk Bytes Per Write: " & vbTab &  _
            objDisk.AvgDiskBytesPerWrite
        Wscript.Echo "Average Disk Queue Length: " & vbTab &  _
           objDisk.AvgDiskQueueLength
        Wscript.Echo "Average Disk Read Queue Length: " & vbTab &  _
            objDisk.AvgDiskReadQueueLength
        Wscript.Echo "Average Disk Seconds Per Read: " & vbTab &  _
            objDisk.AvgDiskSecPerRead
        Wscript.Echo "Average Disk Seconds Per Transfer: " & vbTab &  _
            objDisk.AvgDiskSecPerTransfer      
        Wscript.Echo "Average Disk Seconds Per Write: " & vbTab &  _
            objDisk.AvgDiskSecPerWrite      
        Wscript.Echo "Average Disk Write Queue Length: " & vbTab &  _
            objDisk.AvgDiskWriteQueueLength      
        Wscript.Echo "Current Disk Queue Length: " & vbTab &  _
            objDisk.CurrentDiskQueueLength
        Wscript.Echo "Disk Bytes Per Second: " & vbTab &  _
            objDisk.DiskBytesPerSec     
        Wscript.Echo "Disk Read Bytes Per Second: " & vbTab &  _
            objDisk.DiskReadBytesPerSec
        Wscript.Echo "Disk Reads Per Second: " & vbTab &  _
            objDisk.DiskReadsPerSec
        Wscript.Echo "Disk Transfers Per Second: " & vbTab &  _
            objDisk.DiskTransfersPerSec
        Wscript.Echo "Disk Write Bytes Per Second: " & vbTab &  _
            objDisk.DiskWriteBytesPerSec
        Wscript.Echo "Disk Writes Per Second: " & vbTab &  _
            objDisk.DiskWritesPerSec
        Wscript.Echo "Name: " & vbTab &  objDisk.Name
        Wscript.Echo "Percent Disk Read Time: " & vbTab &  _
            objDisk.PercentDiskReadTime
        Wscript.Echo "Percent Disk Time: " & vbTab &  _
            objDisk.PercentDiskTime     
        Wscript.Echo "Percent Disk Write Time: " & vbTab &  _
            objDisk.PercentDiskWriteTime       
        Wscript.Echo "Percent Idle Time: " & vbTab &  _
            objDisk.PercentIdleTime     
        Wscript.Echo "Split IO Per Second: " & vbTab &  _
            objDisk.SplitIOPerSec       
        Wscript.Sleep 2000
        objRefresher.Refresh
    Next
Next
	

Monitor Physical Disk Performance


Uses cooked performance counters to monitor physical disk performance.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_PerfDisk_PhysicalDisk").objectSet
objRefresher.Refresh

For i = 1 to 5
    For Each objItem in colItems
        Wscript.Echo "Average Disk Bytes Per Read: " & _
            objItem.AvgDiskBytesPerRead
        Wscript.Echo "Average Disk Bytes Per Transfer: " & _
            objItem.AvgDiskBytesPerTransfer
        Wscript.Echo "Average Disk Bytes Per Write: " & _
            objItem.AvgDiskBytesPerWrite
        Wscript.Echo "Average Disk Queue Length: " & objItem.AvgDiskQueueLength
        Wscript.Echo "Average Disk Read Queue Length: " & _
            objItem.AvgDiskReadQueueLength
        Wscript.Echo "Average Disk Seconds Per Read: " & _
            objItem.AvgDisksecPerRead
        Wscript.Echo "Average Disk Seconds Per Transfer: " & _
            objItem.AvgDisksecPerTransfer
        Wscript.Echo "Average Disk Seconds Per Write: " & _
            objItem.AvgDisksecPerWrite
        Wscript.Echo "Average Disk Write Queue Length: " & _
            objItem.AvgDiskWriteQueueLength
        Wscript.Echo "Caption: " & objItem.Caption
        Wscript.Echo "Current Disk Queue Length: " & _
            objItem.CurrentDiskQueueLength
        Wscript.Echo "Description: " & objItem.Description
        Wscript.Echo "Disk Bytes Per Second: " & objItem.DiskBytesPersec
        Wscript.Echo "Disk Read Bytes Per Second: " & _
            objItem.DiskReadBytesPersec
        Wscript.Echo "Disk Reads Per Second: " & objItem.DiskReadsPersec
        Wscript.Echo "Disk Transfers Per Second: " & _
            objItem.DiskTransfersPersec
        Wscript.Echo "Disk Write Bytes Per Second: " & _
            objItem.DiskWriteBytesPersec
        Wscript.Echo "Disk Writes Per Second: " & objItem.DiskWritesPersec
        Wscript.Echo "Name: " & objItem.Name
        Wscript.Echo "Percent Disk Read Time: " & objItem.PercentDiskReadTime
        Wscript.Echo "Percent Disk Time: " & objItem.PercentDiskTime
        Wscript.Echo "Percent Disk Write Time: " & objItem.PercentDiskWriteTime
        Wscript.Echo "Percent Idle Time: " & objItem.PercentIdleTime
        Wscript.Echo "Split I/O Per Second: " & objItem.SplitIOPerSec
        Wscript.Sleep 2000
        objRefresher.Refresh
    Next
Next
	

Monitor Volume Change Events


Temporary event consumer that issues an alert when local volumes are added to or deleted from a computer. (This class monitors only changes to local drives; it cannot detect the addition/deletion of network volumes.)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService. _
    ExecNotificationQuery("Select * from Win32_VolumeChangeEvent")

Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    Wscript.Echo objLatestEvent.DriveName
    Wscript.Echo objLatestEvent.EventType
    Wscript.Echo objLatestEvent.Time_Created
Loop