<Rule ID="Microsoft.SystemCenter.VirtualMachineManager.ManagedHost.PercentProcessorTime.Collection.HyperVHost" Enabled="true" Target="VirtualMachineManager!Microsoft.SystemCenter.VirtualMachineManager.2008.HyperVHost" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>PerformanceHealth</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.PerformanceProvider">
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<ScriptName>HostCPUUtilizationProvider.vbs</ScriptName>
<Arguments/>
<ScriptBody><Script>
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag= oAPI.CreatePropertyBag()
Dim TimePeriodMiliSeconds, strQuery, strLPCountQuery, objWMIService, colItems, sleepTime
TimePeriodMiliSeconds = 30 * 1000
strQuery = "SELECT * FROM Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor where Name='_Total'"
strLPCountQuery = "SELECT * FROM Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor"
Dim F, T1 , P1 , T2 , P2 , CPU
Set objWMIService = GetObject("winmgmts:\\localhost\root\CIMV2")
'Get the LP Count
Set colItems = objWMIService.ExecQuery(strLPCountQuery,,48)
Dim LPCount
LPCount = -1
For Each objItem in colItems
LPCount = LPCount + 1
Next
if LPCount < 1 then
WScript.quit 1
end if
'Record CPU readings with the workaround formula
Set colItems = objWMIService.ExecQuery(strQuery,,48)
For Each objItem in colItems
T1 = objItem.PercentTotalRunTime
P1 = objItem.Timestamp_PerfTime
Next
Wscript.Sleep(TimePeriodMiliSeconds)
Set colItems = objWMIService.ExecQuery(strQuery,,48)
For Each objItem in colItems
F = objItem.Frequency_PerfTime
T2 = objItem.PercentTotalRunTime
P2 = objItem.Timestamp_PerfTime
Next
CPU = (T2 - T1) / ( P2 - P1)
CPU = (F * CPU) / LPCount
CPU = Int(CPU / 100000)