

$searchmem = ::Round($searchcpu1.WorkingSetPrivate / 1mb,1) $searchcpu = ::Round(($searchp2p1 / $searcht2t1 * 100) /$cpu.NumberOfLogicalProcessors, 1) $searcht2t1 = $searchcpu2.Timestamp_Sys100NS - $searchcpu1.Timestamp_Sys100NS $searchp2p1 = $searchcpu2.PercentProcessorTime - $searchcpu1.PercentProcessorTime $searchcpu1 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where $searchmem = Get-WmiObject Win32_Service -Filter "Name = 'WSearch'" This is an example of Windows Search Service. There was a requirement to get status and cpu / memory usage of some specific windows servers. This logic applies for all programming language which supports WMI queries The following were loaded: msvcrt.dll and kernel32.dll are DLL imported by my Hello World program. To my surprise I have 5 events of type 'Load Image'. Then I watched it execution through SysInternals Procmon.
#Windows procmon code#
P2 indicated PercentProcessorTime retrieved for the second time, and p1 indicateds the PercentProcessorTime retrieved for the first time, t2 and t1 is for TimeStamp_Sys100NS.Ī sample Perl code for this can be found in the link I wrote a 32 bits C++ Hello World program. Apply CPU% utilization formula CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors

To retrieve the values of PercentProcessorTime, TimeStamp_Sys100NS ( CPU utilization formula has be applied get the actual utilization percentage)and WorkingSetPrivate ( RAM ) minimum of 2 times with a sleep interval of 1 second select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234ģ. To retrieve the total number of logical process select NumberOfLogicalProcessors from Win32_ComputerSystemĢ. We need to execute 2 WMI Select Queries and apply CPU% utilization formulaġ. You can also try using a C#/Perl/Java script get the utilization data using WMI Commands, and below is the steps for it.
