重新整理腳本中的 WMI 資料

在監視腳本中,您可以使用SWbemRefresher物件來避免對GetObject的後續呼叫。 SWbemRefresher物件是一個容器,可以保存數個 WMI 物件,其資料可以在一次呼叫中重新整理。

您必須使用 SWbemRefresher 物件,才能從 WMI 效能類別取得精確的資料,例如 Win32_PerfFormattedData_PerfDisk_LogicalDisk 或其他衍生自 Win32_Perf的預先安裝類別。

下列程式描述如何在腳本中重新整理資料。

重新整理腳本中的資料

  1. 呼叫 CreateObject 以建立 SWbemRefresher 重新整理器物件。

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. 連接到 WMI 命名空間。 若要使用預先安裝 Win32_Perf 效能類別,請連線到 root\cimv2

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. 將單一物件 (呼叫 SWbemRefresher.Add) 或集合 (呼叫 SWbemRefresher.AddEnum) 重新整理器。

    例如,使用衍生自 Win32_PerfFormattedData 的預先計算資料類別,例如 ,Win32_PerfFormattedData_PerfDisk_LogicalDisk 而不是 Win32_PerfRawData_PerfDisk_LogicalDisk。 否則,您必須計算簡單計數器以外的所有屬性的值。

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. 重新整理資料一次,以取得初始效能資料。

    呼叫 SWbemRefresher.Refresh 方法或泛型 SWbemObjectEx.Refresh_ 方法。

    objRefresher.Refresh
    
  5. 如果您要監視效能,並在重新整理程式物件中有集合,請迴圈查看集合物件。

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. 呼叫 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

傳回之 SWbemRefreshableItemIndex屬性代表重新整理器集合中物件的索引。 您可以呼叫 SWbemRefreshableItem.IsSet 屬性來判斷重新整理器中的專案是否為單一專案或集合。 若要存取單一專案,請使用 SWbemRefreshableItem.Object 屬性。 如果您未呼叫 SWbemRefreshableItem.Object,則當您嘗試存取物件時,腳本會失敗。 若要存取集合,請使用 SWbemRefreshableItem.ObjectSet 屬性。

效能計數器類別

存取腳本中的效能資料

WMI 工作:效能監視

監視效能資料