重新整理腳本中的 WMI 資料
在監視腳本中,您可以使用SWbemRefresher物件來避免對GetObject的後續呼叫。 SWbemRefresher物件是一個容器,可以保存數個 WMI 物件,其資料可以在一次呼叫中重新整理。
您必須使用 SWbemRefresher 物件,才能從 WMI 效能類別取得精確的資料,例如 Win32_PerfFormattedData_PerfDisk_LogicalDisk 或其他衍生自 Win32_Perf的預先安裝類別。
下列程式描述如何在腳本中重新整理資料。
重新整理腳本中的資料
呼叫 CreateObject 以建立 SWbemRefresher 重新整理器物件。
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 實例新增列舉值的實例。 重新整理呼叫會進行三次,以示範使用一個以上處理器時間之進程的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 屬性。
相關主題