重新整理腳本中的 WMI 資料
在監視腳本中,您可以使用 SWbemRefresher 物件,避免一再呼叫 GetObject。 SWbemRefresher 對像是一個容器,可以保存數個 WMI 物件,其數據可以在一次呼叫中重新整理。
需要 SWbemRefresher 物件,才能從 WMI 效能類別取得精確的數據,例如 Win32_PerfFormattedData_PerfDisk_LogicalDisk 或其他衍生自 Win32_Perf的預安裝類別。
下列程式描述如何在文稿中重新整理數據。
若要重新整理腳本中的數據
呼叫 CreateObject,以建立 SWbemRefresher refresher 物件。
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
連接到 WMI 命名空間。 若要使用預安裝 Win32_Perf 效能類別,請連線至 root\cimv2。
Set objServicesCimv2 = GetObject("winmgmts:\\" _ & strComputer & "\root\cimv2")
將單一物件 (呼叫 SWbemRefresher.Add) 或集合 (呼叫 SWbemRefresher.AddEnum) 新增至重新整理器。
例如,使用衍生自 Win32_PerfFormattedData的預先計算資料類別,例如,Win32_PerfFormattedData_PerfDisk_LogicalDisk,而不是 Win32_PerfRawData_PerfDisk_LogicalDisk。 否則,您必須計算簡單計數器以外的所有屬性的值。
Set objRefreshableItem = _ objRefresher.AddEnum(objServicesCimv2 , _ "Win32_PerfFormattedData_PerfProc_Process")
重新整理數據一次以取得初始效能數據。
呼叫 SWbemRefresher.Refresh 方法或泛型 SWbemObjectEx.Refresh_ 方法。
objRefresher.Refresh
如果您要監視效能,並且重新整理器物件中有集合時,請遍歷集合物件。
For Each Process in objRefreshableItem.ObjectSet If Process.PercentProcessorTime > 1 then WScript.Echo Process.Name & vbnewLine _ & Process.PercentProcessorTime & "%" End If Next
若要清除重新整理器中的專案,可以透過呼叫 SWbemRefresher.DeleteAll 清除所有專案,或透過呼叫 SwbemRefresher.Remove移除特定專案。
下列 VBScript 程式代碼範例示範如何在本機計算機上重新整理單一物件。 腳本會建立刷新容器,並新增一個針對 Win32_PerfFormattedData_PerfProc_Process 實例的枚舉器實例。 Refresh 呼叫會進行三次,以示範使用處理器時間百分之一以上之處理程式的 PercentProcessorTime 屬性變更。
On Error Resume Next
strComputer = "."
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set objServicesCimv2 = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
If Err = 0 Then
Set objRefreshableItem = _
objRefresher.AddEnum(objServicesCimv2 ,"Win32_PerfFormattedData_PerfProc_Process")
objRefresher.Refresh
' Loop through the processes three times to locate
' and display all the process currently using
' more than 1 % of the process time. Refresh on each pass.
For i = 1 to 3
Wscript.Echo "Refresh number " & i
objRefresher.Refresh
For Each Process in objRefreshableItem.ObjectSet
If Process.PercentProcessorTime > 1 then
WScript.Echo Process.Name & vbnewLine & Process.PercentProcessorTime & "%"
End If
Next
Next
Else
WScript.Echo Err.Description
End If
傳回之 SWbemRefreshableItem 的 Index 屬性代表重新整理器集合中物件的索引。 您可以呼叫 SWbemRefreshableItem.IsSet 屬性,以判斷重新整理器中的專案是否為單一專案或集合。 若要存取單一專案,請使用 SWbemRefreshableItem.Object 屬性。 如果您未呼叫 SWbemRefreshableItem.Object,則嘗試存取物件時腳本會失敗。 若要存取集合,請使用 SWbemRefreshableItem.ObjectSet 屬性。
相關主題