共用方式為


重新整理腳本中的 WMI 資料

在監視腳本中,您可以使用 SWbemRefresher 物件,避免一再呼叫 GetObjectSWbemRefresher 對像是一個容器,可以保存數個 WMI 物件,其數據可以在一次呼叫中重新整理。

需要 SWbemRefresher 物件,才能從 WMI 效能類別取得精確的數據,例如 Win32_PerfFormattedData_PerfDisk_LogicalDisk 或其他衍生自 Win32_Perf的預安裝類別。

下列程式描述如何在文稿中重新整理數據。

若要重新整理腳本中的數據

  1. 呼叫 CreateObject,以建立 SWbemRefresher refresher 物件。

    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 實例的枚舉器實例。 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

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

性能計數器類別

在腳本中存取效能數據

WMI 工作:效能監控

監視性能數據