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