Partager via


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

  1. Appelez CreateObject pour créer un objet d’actualisation SWbemRefresher.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. 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")
    
  3. 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")
    
  4. 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
    
  5. 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
    
  6. 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.

Classes de compteur de performances

Accès aux données de performances dans le script

Tâches WMI : Analyse des performances

Supervision des données de performance