AvgDiskSecPerTransfer VBScript
Using a visual basic script, you can check the according WMI class and report the results to PRTG. In PRTG, run the script as an EXE/Script Sensor.
Use at Your Own Risk
In the following, we provide a script, ready for your own adaptations. Please note: We provide this information to experienced users "as it is", without any warranty, and we also cannot support you with customizing your EXE/Script sensors. Please see further documentation within the script.
' ********************************************************************************
' PRTG Custom EXE Sensor, VB Demo Script for calclulating the time, in seconds,
' of the average disk transfer via WMI
' ********************************************************************************
' created Feb 2011 for PRTG Network Monitor V8 by Paessler Support Team, www.paessler.com
' This script is Open Source and comes without support and warranty
'************ How it works ***************************************************
' This scripts utilizes the Performance Counter "AvgDisksecPerTransfer" from
' the WMI Class "Win32_PerfRawData_PerfDisk_LogicalDisk".
' http://msdn.microsoft.com/en-us/library/aa394307%28v=vs.85%29.aspx.
' "AvgDiskSecPerTransfer" is defined as Type "uint32" and is of CounterType "805438464" which means
' "PERF_AVERAGE_TIMER" (http://msdn.microsoft.com/en-us/library/ms804010.aspx)
' results are calculated by the formula "((N1 - N0) / F) / (D1 - D0)"
' DefaultScale is set to "3" for this counter. This indicates the power of 10 by which to multiply the counter value
' before displaying the counter. For example, if Default scale is set to 2,
' the counter value is multiplied by 100. If Default scale is set to -3, the counter value is divided by 1,000.
' http://msdn.microsoft.com/en-us/library/aa392761%28v=vs.85%29.aspx
' http://msdn.microsoft.com/en-us/library/e8a76594%28v=vs.71%29.aspx
'************ IMPORTANT ***************************************************
' This script stores the values of every reading in a file. Make sure the the script has the necessary
' rights to create this file, and perform read and write operations to the file.
' Each sensor of this kind must have its own file to store its values.
strFile = "c:\temp\sensor01.txt"
Const ForReading = 1
Const ForWriting = 2
'************ Set Your WMI Credentials here ****************
' Leave User and Password blank for local machine
strComputer = "."
strUser = ""
strPassword = ""
strNamespace = "root/cimv2"
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(strComputer,strNamespace,strUser,strPassword)
strWQL = "SELECT AvgDisksecPerTransfer,AvgDiskSecPerTransfer_Base,Timestamp_Perftime,Frequency_PerfTime FROM Win32_PerfRawData_PerfDisk_LogicalDisk"
strWQL = strWQL + " WHERE Name = '_Total'"
Set objResultSet = objWMIService.ExecQuery(strWQL)
For Each obj in objResultSet
iAvgDisksecPerTransfer = obj.AvgDisksecPerTransfer
iAvgDiskSecPerTransfer_Base = obj.AvgDiskSecPerTransfer_Base
iTimestamp_Perftime = obj.Timestamp_Perftime
iFrequency_PerfTime = obj.Frequency_PerfTime
Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strFile) Then
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
iAvgDisksecPerTransferOld = objFile.Readline
iAvgDiskSecPerTransfer_BaseOld = objFile.Readline
iTimestamp_PerftimeOld = objFile.Readline
iFrequency_PerfTimeOld = objFile.Readline
objFile.Close
Set objFile = nothing
iResult = (iTimestamp_Perftime - iTimestamp_PerftimeOld)
iResult = iResult / iAvgDiskSecPerTransfer_Base
iResult = iResult / (iAvgDisksecPerTransfer - iAvgDisksecPerTransferOld)
iResult = iResult * 1000
iResult = Round(iResult,6)
' ************* IMPORTANT **********
' You may have to replace the decimal symbol. It must be ".", so uncomment the next line if need be.
strResult = Replace(CStr(iResult),",",".")
wscript.echo StrResult &":Ok"
Else
Set objFile = objFSO.CreateTextFile(strFile)
Set objFile = nothing
wscript.echo "0:Ok"
End If
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.WriteLine(iAvgDisksecPerTransfer)
objFile.WriteLine(iAvgDiskSecPerTransfer_Base)
objFile.WriteLine(iTimestamp_Perftime)
objFile.WriteLine(iFrequency_PerfTime)
objFile.Close
Add comment