Actualisation des données WMI dans les scripts
Dans les scripts de supervision, vous pouvez éviter les appels successifs à GetObject à l’aide d’un objet SWbemRefresher . L’objet SWbemRefresher est un conteneur qui peut contenir plusieurs objets WMI dont les données peuvent être actualisées en un seul appel.
L’utilisation d’un objet SWbemRefresher est nécessaire pour obtenir des données précises à partir des classes de performances WMI, telles que Win32_PerfFormattedData_PerfDisk_LogicalDisk ou d’autres classes préinstallées dérivées de Win32_Perf.
La procédure suivante décrit comment actualiser des données dans des scripts.
Pour actualiser des données dans des scripts
Appelez CreateObject pour créer un objet d’actualisation SWbemRefresher.
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Connectez-vous à l’espace de noms WMI. Pour utiliser des classes de performancesWin32_Perf préinstallées, connectez-vous à root\cimv2.
Set objServicesCimv2 = GetObject("winmgmts:\\" _ & strComputer & "\root\cimv2")
Ajoutez un seul objet (appelez SWbemRefresher.Add) ou une collection (appelez SWbemRefresher.AddEnum) à l’actualisation.
Utilisez les classes de données précalculées dérivées de Win32_PerfFormattedData, par exemple , Win32_PerfFormattedData_PerfDisk_LogicalDisk au lieu de Win32_PerfRawData_PerfDisk_LogicalDisk. Sinon, vous devez calculer les valeurs de toutes les propriétés autres que les compteurs simples.
Set objRefreshableItem = _ objRefresher.AddEnum(objServicesCimv2 , _ "Win32_PerfFormattedData_PerfProc_Process")
Actualisez les données une fois pour obtenir les données de performances initiales.
Appelez la méthode SWbemRefresher.Refresh ou la méthode SWbemObjectEx.Refresh_ générique.
objRefresher.Refresh
Si vous surveillez les performances et que vous avez une collection dans l’objet d’actualisation, parcourez en boucle les objets de collection.
For Each Process in objRefreshableItem.ObjectSet If Process.PercentProcessorTime > 1 then WScript.Echo Process.Name & vbnewLine _ & Process.PercentProcessorTime & "%" End If Next
Effacez les éléments de l’actualisation en appelant SWbemRefresher.DeleteAll ou supprimez des éléments spécifiques en appelant SwbemRefresher.Remove.
L’exemple de code VBScript suivant montre comment actualiser un seul objet sur l’ordinateur local. Le script crée un conteneur d’actualisation et ajoute une instance d’énumérateur pour Win32_PerfFormattedData_PerfProc_Process instances. L’appel d’actualisation est effectué trois fois pour illustrer les modifications apportées à la propriété PercentProcessorTime pour les processus qui utilisent plus d’un pour cent du temps processeur.
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 propriété Index de l’objetSWbemRefreshableItem renvoyé représente l’index de l’objet dans la collection d’actualisation. Vous pouvez appeler la propriété SWbemRefreshableItem.IsSet pour déterminer si un élément dans un actualiseur est un élément unique ou une collection. Pour accéder à un seul élément, utilisez la propriété SWbemRefreshableItem.Object. Si vous n’effectuez pas l’appel à SWbemRefreshableItem.Object, le script échoue lorsque vous essayez d’accéder à l’objet. Pour accéder à une collection, utilisez la propriété SWbemRefreshableItem.ObjectSet.
Rubriques connexes