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
Chiamare CreateObject per creare un oggetto refresher SWbemRefresher .
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
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")
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")
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
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
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 .
Argomenti correlati