Преобразование значений PerfRawData в выполненные данные -WMI - PullRequest
0 голосов
/ 24 сентября 2010

Мне нужно преобразовать значение PagesPersec из Win32_PerfRawData_PerfOS_Memory в значение PerfFormatted Data. Как преобразовать значения данных PerfRaw из счетчиков Perfmance WMI в значения PerfFormatted Data. Есть стандартная формула, рекомендуемая Windows.

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Формула, которая вам нужна, зависит от CounterType ... см. http://msdn.microsoft.com/en-us/library/aa392761(v=VS.85).aspx

чтобы начать, посмотрите на http://msdn.microsoft.com/en-us/library/aa394597.aspx

0 голосов
/ 14 апреля 2014

Слишком долго, чтобы ответить здесь. Есть очень хорошая статья с образцами 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
...