Condividi tramite


Aggiornamento dei dati WMI negli script

Negli script di monitoraggio è possibile evitare chiamate successive a GetObject usando un oggetto SWbemRefresher . L'oggetto SWbemRefresher è un contenitore che può contenere diversi oggetti WMI i cui dati possono essere aggiornati in una sola chiamata.

L'uso di un oggetto SWbemRefresher è necessario per ottenere dati accurati dalle classi di prestazioni WMI, ad esempio Win32_PerfFormattedData_PerfDisk_LogicalDisk o altre classi preinstallate derivate da Win32_Perf.

La procedura seguente descrive come aggiornare i dati negli script.

Per aggiornare i dati negli script

  1. Chiamare CreateObject per creare un oggetto refresher SWbemRefresher .

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Connettersi allo spazio dei nomi WMI. Per usare le classi di prestazioni preinstallate Win32_Perf , connettersi a root\cimv2.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Aggiungere un singolo oggetto (chiamare SWbemRefresher.Add) o una raccolta (chiamare SWbemRefresher.AddEnum) al aggiornatore.

    Usare le classi di dati precalcolate derivate da Win32_PerfFormattedData, ad esempio , Win32_PerfFormattedData_PerfDisk_LogicalDisk anziché Win32_PerfRawData_PerfDisk_LogicalDisk. In caso contrario, è necessario calcolare i valori per tutte le proprietà diverse dai contatori semplici.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Aggiornare i dati una volta per ottenere i dati di prestazioni iniziali.

    Chiamare il metodo SWbemRefresher.Refresh o il metodo di SWbemObjectEx.Refresh_ generico.

    objRefresher.Refresh
    
  5. Se si monitorano le prestazioni e si dispone di una raccolta nell'oggetto aggiornatore, eseguire il ciclo attraverso gli oggetti della raccolta.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Cancellare gli elementi dal aggiornatore chiamando SWbemRefresher.DeleteAll o rimuovendo elementi specifici chiamando SwbemRefresher.Remove.

Nell'esempio di codice VBScript seguente viene illustrato come aggiornare un singolo oggetto nel computer locale. Lo script crea un contenitore di aggiornamento e aggiunge un'istanza di un enumeratore per le istanze di Win32_PerfFormattedData_PerfProc_Process . La chiamata Refresh viene effettuata tre volte per illustrare le modifiche apportate alla proprietà PercentProcessorTime per i processi usando più di uno del tempo del processore.

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

La proprietà Index dell'oggetto SWbemRefreshableItem restituito rappresenta l'indice dell'oggetto nell'insieme refresher. È possibile chiamare la proprietà SWbemRefreshableItem.IsSet per determinare se un elemento in un aggiornamento è un singolo elemento o una raccolta. Per accedere a un singolo elemento, usare la proprietà SWbemRefreshableItem.Object . Se non si esegue la chiamata a SWbemRefreshableItem.Object, lo script non riesce quando si tenta di accedere all'oggetto. Per accedere a una raccolta, usare la proprietà SWbemRefreshableItem.ObjectSet .

Classi di contatori delle prestazioni

Accesso ai dati sulle prestazioni nello script

Attività WMI: Monitoraggio delle prestazioni

Monitoraggio dei dati sulle prestazioni