Delen via


WMI-gegevens vernieuwen in scripts

Bij het monitoren van scripts kunt u opeenvolgende aanroepen naar GetObject voorkomen door gebruik te maken van een SWbemRefresher-object. Het SWbemRefresher object is een container die meerdere WMI-objecten kan bevatten waarvan de gegevens in één aanroep kunnen worden vernieuwd.

Het gebruik van een SWbemRefresher--object is vereist om nauwkeurige gegevens op te halen uit WMI-prestatieklassen, zoals Win32_PerfFormattedData_PerfDisk_LogicalDisk of andere vooraf geïnstalleerde klassen die zijn afgeleid van Win32_Perf.

In de volgende procedure wordt beschreven hoe u gegevens in scripts vernieuwt.

Gegevens vernieuwen in scripts

  1. Roep CreateObject- aan om een SWbemRefresher ververserobject te maken.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Maak verbinding met de WMI-naamruimte. Als u vooraf geïnstalleerde Win32_Perf prestatieklassen wilt gebruiken, maakt u verbinding met root\cimv2-.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Voeg één object (aanroepen SWbemRefresher.Add) of een verzameling (aanroepen SWbemRefresher.AddEnum) toe aan de vernieuwingsfunctie.

    Gebruik de vooraf berekende gegevensklassen die zijn afgeleid van Win32_PerfFormattedData, bijvoorbeeld Win32_PerfFormattedData_PerfDisk_LogicalDisk in plaats van Win32_PerfRawData_PerfDisk_LogicalDisk. Anders moet u de waarden berekenen voor alle andere eigenschappen dan eenvoudige tellers.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Vernieuw de gegevens één keer om de initiële prestatiegegevens op te halen.

    Roep de methode SWbemRefresher.Refresh of de algemene SWbemObjectEx.Refresh_ methode aan.

    objRefresher.Refresh
    
  5. Als u de prestaties bewaakt en een verzameling in het vernieuwingsobject hebt, doorloopt u de verzamelingsobjecten.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Verwijder de items uit de vernieuwingsfunctie door SWbemRefresher.DeleteAll aan te roepen, of verwijder specifieke items door SwbemRefresher.Removete gebruiken.

In het volgende VBScript-codevoorbeeld ziet u hoe u één object op de lokale computer vernieuwt. Het script creëert een ververscontainer en voegt een instantie van een enumerator toe voor Win32_PerfFormattedData_PerfProc_Process instanties. De -aanroep vernieuwen wordt drie keer uitgevoerd om de wijzigingen in de eigenschap PercentProcessorTime te demonstreren voor processen die meer dan één procent van de processortijd gebruiken.

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

De eigenschap Index van de geretourneerde SWbemRefreshableItem vertegenwoordigt de index van het object in de vernieuwingsverzameling. U kunt de eigenschap SWbemRefreshableItem.IsSet aanroepen om te bepalen of een item in een vernieuwingsfunctie een enkel item of een verzameling is. Als u toegang wilt krijgen tot één item, gebruikt u de eigenschap SWbemRefreshableItem.Object. Als u de aanroep niet uitvoert naar SWbemRefreshableItem.Object, mislukt het script wanneer u het object probeert te openen. Als u toegang wilt krijgen tot een verzameling, gebruikt u de eigenschap SWbemRefreshableItem.ObjectSet.

Prestatiemeterklassen

toegang tot prestatiegegevens in script

WMI-taken: Prestatiebewaking

Prestatiegegevens bewaken