Condividi tramite


Aggiornamento dei dati WMI negli script

Negli script di monitoraggio è possibile evitare chiamate successive a GetObject usando un oggettoSWbemRefresher. 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. Usare CreateObject per creare un oggetto SWbemRefresher .

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Connettersi allo spazio dei nomi WMI. Per usare classi di prestazioni Win32_Perf preinstallate, 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 refresher.

    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 sulle prestazioni iniziali.

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

    objRefresher.Refresh
    
  5. Se si monitorano le prestazioni e si dispone di una raccolta nell'oggetto refresher, scorrere 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. Cancella gli elementi dal refresher chiamando SWbemRefresher.DeleteAll o rimuovi 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 Win32_PerfFormattedData_PerfProc_Process. La chiamataRefresh viene eseguita tre volte per illustrare le modifiche apportate alla proprietà PercentProcessorTime per i processi che usano più del 1% 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àIndexdell'oggetto restituito SWbemRefreshableItem rappresenta l'indice dell'oggetto nell'insieme refresher. È possibile chiamare proprietà SWbemRefreshableItem.IsSet per determinare se un elemento in un aggiornamento è un singolo elemento o un insieme. Per accedere a un singolo elemento, utilizzare la proprietà SWbemRefreshableItem.Object . Se non si effettua la chiamata a SWbemRefreshableItem.Object, lo script non riesce quando si tenta di accedere all'oggetto. Per accedere a un insieme, utilizzare la proprietà SWbemRefreshableItem.ObjectSet.

Classi dei contatori delle prestazioni

Accesso ai dati sulle prestazioni negli script

Attività WMI: Monitoraggio delle prestazioni

Monitoraggio dei dati sulle prestazioni