将PerfRawData值转换为Performatted数据-WMI

时间:2010-09-24 12:07:44

标签: wmi wmi-query

我需要将PagesPersec值从Win32_PerfRawData_PerfOS_Memory转换为PerfFormatted Data值。如何将PerfRaw数据值从WMI Perfomance计数器转换为PerfFormatted Data值。是否有Windows推荐的标准公式。

2 个答案:

答案 0 :(得分:1)

您需要的公式取决于CounterType ...请参阅 http://msdn.microsoft.com/en-us/library/aa392761(v=VS.85).aspx

要开始使用,请查看http://msdn.microsoft.com/en-us/library/aa394597.aspx

答案 1 :(得分:0)

这里回答太久了。有一篇非常好的文章包含样本http://msdn.microsoft.com/en-us/library/ms974615.aspx

简而言之:它取决于柜台类型。对于某些计数器,我可以只读取(磁盘空间)并且需要基于两个请求计算一个比另一个稍晚的计算,例如:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_PerfRawData_PerfOS_Processor Where Name = '0'")
For Each objItem in colItems
    CounterValue1 = objItem.InterruptsPerSec
    TimeValue1 = objItem.TimeStamp_PerfTime
    TimeBase = objItem.Frequency_PerfTime
Next
For i = 1 to 5
    Wscript.Sleep(1000)
    Set colItems = objWMIService.ExecQuery _
       ("Select * From Win32_PerfRawData_PerfOS_Processor Where Name = '0'")
    For Each objItem in colItems
        CounterValue2 = objItem.InterruptsPerSec
        TimeValue2 = objItem.TimeStamp_PerfTime
        If TimeValue2 - TimeValue1 = 0 Then
            Wscript.Echo "Interrupts Per Second = 0"
        Else
            intInterrupts = (CounterValue2 - CounterValue1) / _
                ( (TimeValue2 - TimeValue1) / TimeBase)
            Wscript.Echo "Interrupts Per Second = " & Int(intInterrupts)
        End if
        CounterValue1 = CounterValue2
        TimeValue1 = TimeValue2
    Next
Next