Aracılığıyla paylaş


Betiklerde WMI Verilerini Yenileme

İzleme betiklerinde, bir SWbemRefresher nesnesi kullanarak GetObject ardışık çağrılardan kaçınabilirsiniz. SWbemRefresher nesnesi, verileri tek bir çağrıda yenilenebilen çeşitli WMI nesnelerini barındırabilen bir kapsayıcıdır.

SWbemRefresher nesnesinin kullanılması, Win32_PerfFormattedData_PerfDisk_LogicalDisk veya Win32_Perftüretilmiş diğer önceden yüklenmiş sınıflar gibi WMI performans sınıflarından doğru veriler almak için gereklidir.

Aşağıdaki yordam, betiklerdeki verilerin nasıl yenilendiğini açıklar.

Betiklerdeki verileri yenilemek

  1. SWbemRefresher yenileyici nesnesi oluşturmak için CreateObject'yi çağır.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. WMI ad alanına bağlanın. Önceden yüklenmiş Win32_Perf performans sınıflarını kullanmak için root\cimv2öğesine bağlanın.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Yenileyiciye tek bir nesne (SWbemRefresher.Addçağrısı) veya koleksiyon (SWbemRefresher.AddEnumçağrısı) ekleyin.

    Win32_PerfRawData_PerfDisk_LogicalDiskyerine Win32_PerfFormattedData_PerfDisk_LogicalDisk gibi Win32_PerfFormattedDatatüretilmiş önceden hesaplanmış veri sınıflarını kullanın. Aksi takdirde, basit sayaçlar dışındaki tüm özelliklerin değerlerini hesaplamanız gerekir.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. İlk performans verilerini almak için verileri bir kez yenileyin.

    SWbemRefresher.Refresh yöntemini veya genel SWbemObjectEx.Refresh_ yöntemini çağırın.

    objRefresher.Refresh
    
  5. Performansı izliyorsanız ve yenileyici nesnesinde bir koleksiyonunuz varsa, koleksiyon nesneleri arasında döngü yapın.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. SWbemRefresher.DeleteAll çağırarak veya SwbemRefresher.Removeçağırarak yenileticideki öğeleri temizleyin.

Aşağıdaki VBScript kod örneği, yerel bilgisayardaki tek bir nesnenin nasıl yenileneceğini gösterir. Betik bir yenileyici kapsayıcı oluşturur ve Win32_PerfFormattedData_PerfProc_Process örnekleri için bir numaralandırıcı örneği ekler. Yenileme çağrısı, işlemci süresinin yüzde birinden fazlasını kullanan işlemler için PercentProcessorTime özelliğindeki değişiklikleri göstermek üzere üç kez yapılır.

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

Döndürülen SWbemRefreshableItemIndex özelliği, yenileyici koleksiyonundaki nesnenin dizinini temsil eder. Yenileyicideki bir öğenin tek bir öğe mi yoksa koleksiyon mu olduğunu belirlemek için SWbemRefreshableItem.IsSet özelliğini çağırabilirsiniz. Tek bir öğeye erişmek için SWbemRefreshableItem.Object özelliğini kullanın. SWbemRefreshableItem.Objectçağrısı yapmazsanız, nesneye erişmeye çalıştığınızda betik başarısız olur. Bir koleksiyona erişmek için SWbemRefreshableItem.ObjectSet özelliğini kullanın.

Performans Sayacı Sınıfları

Betikte Performans Verilerine Erişme

WMI Görevleri - Performans İzleme

Performans Verilerini İzleme