Dela via


Uppdatera WMI-data i skript

I övervakningsskript kan du undvika efterföljande anrop till GetObject- med hjälp av ett SWbemRefresher--objekt. SWbemRefresher--objektet är en container som kan innehålla flera WMI-objekt vars data kan uppdateras i ett anrop.

Att använda ett SWbemRefresher--objekt krävs för att hämta korrekta data från WMI-prestandaklasser, till exempel Win32_PerfFormattedData_PerfDisk_LogicalDisk eller andra förinstallerade klasser som härleds från Win32_Perf.

Följande procedur beskriver hur du uppdaterar data i skript.

Uppdatera data i skript

  1. Anropa CreateObject för att skapa ett uppdateringsobjekt av typen SWbemRefresher.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Anslut till WMI-namnområdet. Om du vill använda förinstallerade Win32_Perf prestandaklasser ansluter du till root\cimv2.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Lägg till ett enskilt objekt (anropa SWbemRefresher.Add) eller en samling (anropa SWbemRefresher.AddEnum) i uppdateraren.

    Använd de förberäknade dataklasserna som härleds från Win32_PerfFormattedData, till exempel Win32_PerfFormattedData_PerfDisk_LogicalDisk i stället för Win32_PerfRawData_PerfDisk_LogicalDisk. Annars måste du beräkna värdena för alla andra egenskaper än enkla räknare.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Uppdatera data en gång för att hämta de första prestandadata.

    Anropa antingen metoden SWbemRefresher.Refresh eller den generiska metoden SWbemObjectEx.Refresh_.

    objRefresher.Refresh
    
  5. Om du övervakar prestanda och har en samling i förnyelseobjektet, bläddra igenom samlingsobjekten.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Rensa objekten från uppdateringsprogrammet genom att anropa SWbemRefresher.DeleteAll eller ta bort specifika objekt genom att anropa SwbemRefresher.Remove.

Följande VBScript-kodexempel visar hur du uppdaterar ett enskilt objekt på den lokala datorn. Skriptet skapar en uppdateringscontainer och lägger till en instans av en uppräknare för Win32_PerfFormattedData_PerfProc_Process instanser. Anropet Refresh görs tre gånger för att demonstrera ändringarna i egenskapen PercentProcessorTime för processer som använder mer än en procent av processortiden.

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

Egenskapen Index för den returnerade SWbemRefreshableItem representerar objektets index i uppdateringssamlingen. Du kan anropa egenskapen SWbemRefreshableItem.IsSet för att avgöra om ett objekt i en uppdatering är ett enskilt objekt eller en samling. Om du vill komma åt ett enskilt objekt använder du egenskapen SWbemRefreshableItem.Object. Om du inte anropar SWbemRefreshableItem.Objectmisslyckas skriptet när du försöker komma åt objektet. Om du vill komma åt en samling använder du egenskapen SWbemRefreshableItem.ObjectSet.

prestandaräknarklasser

åtkomst till prestandadata i skript

WMI-uppgifter: Prestandaövervakning

Övervakning av prestandadata