Obtention de données de performance statistiques
Dans WMI, vous pouvez définir des données de performance statistiques basées sur des données dans des classes de performance formatées dérivées de Win32_PerfFormattedData. Les statistiques disponibles sont la moyenne, le minimum, le maximum, l’intervalle et la variance, comme défini dans les types de compteurs statistiques.
La liste suivante inclut les types de compteurs statistiques spéciaux :
Les exemples suivants montrent comment :
- Créer un fichier MOF qui définit une classe de données calculées.
- Écrire un script qui crée une instance de la classe et actualise périodiquement les données de l’instance avec les valeurs statistiques recalculées.
Fichier MOF
L’exemple de code MOF suivant crée une nouvelle classe de données calculées nommée Win32_PerfFormattedData_AvailableMBytes. Cette classe contient des données de la propriété AvailableMBytes de la classe brute Win32_PerfRawData_PerfOS_Memory. La classe Win32_PerfFormattedData_AvailableBytes définit les propriétés Average, Min, Max, Range, et Variance.
Le fichier MOF utilise les qualificatifs de propriété pour les classes de compteurs de performance formatées pour définir la source de données de la propriété et la formule de calcul.
- La propriété Average obtient des données brutes de la propriété Win32_PerfRawData_PerfOS_Memory.AvailableMBytes.
- Le qualificatif Counter pour la propriété Average spécifie la source de données brute.
- Le qualificatif CookingType spécifie la formule COOKER_MIN pour le calcul des données.
- Le qualificatif SampleWindow spécifie combien d’échantillons prendre avant de réaliser le calcul.
// Store the new Win32_PerfFormattedData_MemoryStatistics
// class in the Root\Cimv2 namespace
#pragma autorecover
#pragma namespace("\\\\.\\Root\\CimV2")
qualifier vendor:ToInstance;
qualifier guid:ToInstance;
qualifier displayname:ToInstance;
qualifier perfindex:ToInstance;
qualifier helpindex:ToInstance;
qualifier perfdetail:ToInstance;
qualifier countertype:ToInstance;
qualifier perfdefault:ToInstance;
qualifier defaultscale:ToInstance;
qualifier dynamic:ToInstance;
qualifier hiperf:ToInstance;
qualifier AutoCook:ToInstance;
qualifier AutoCook_RawClass:ToInstance;
qualifier CookingType:ToInstance;
qualifier Counter:ToInstance;
// Define the Win32_PerFormattedData_MemoryStatistics
// class, derived from Win32_PerfFormattedData
[
dynamic,
// Name of formatted data provider: "WMIPerfInst" for Vista
// and later
provider("HiPerfCooker_v1"),
// Text that will identify new counter in Perfmon
displayname("My Calculated Counter"),
// A high performance class
Hiperf,
// Contains calculated data
Cooked,
// Value must be 1
AutoCook(1),
// Raw performance class to get data for calculations
AutoCook_RawClass("Win32_PerfRawData_PerfOS_Memory"),
// Value must be 1
AutoCook_RawDefault(1),
// Name of raw class property to use for timestamp in formulas
PerfSysTimeStamp("Timestamp_PerfTime"),
// Name of raw class property to use for frequency in formulas
PerfSysTimeFreq("Frequency_PerfTime"),
// Name of raw class property to use for timestamp in formulas
Perf100NSTimeStamp("Timestamp_Sys100NS"),
// Name of raw class property to use for frequency in formulas
Perf100NSTimeFreq("Frequency_Sys100NS"),
// Name of raw class property to use for timestamp in formulas
PerfObjTimeStamp("Timestamp_Object"),
// Name of raw class property to use for frequency in formulas
PerfObjTimeFreq("Frequency_Object"),
// Only one instance of class allowed in namespace
singleton
]
class Win32_PerfFormattedData_MemoryStatistics
: Win32_PerfFormattedData
{
// Define the properties for the class.
// All the properties perform different
// statistical operations on the same
// property, AvailableMBytes, in the raw class
// Define the Average property,
// which uses the "COOKER_AVERAGE" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_AVERAGE"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Average = 0;
// Define the Min property, which uses
// the "COOKER_MIN" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_MIN"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Min = 0;
// Define the Max property, which uses
// the "COOKER_MAX" counter type and
// gets its data from the
// AvailableMBytes property in the raw class
[
CookingType("COOKER_MAX"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Max = 0;
// Define the Range property, which uses
// the "COOKER_RANGE" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_RANGE"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Range = 0;
// Define the Variance property, which uses
// the "COOKER_VARIANCE" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_VARIANCE"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Variance = 0;
};
Script
L’exemple de code de script suivant obtient des statistiques sur la mémoire disponible, en mégaoctets, en utilisant le MOF créé précédemment. Le script utilise l’objet de script SWbemRefresher pour créer un rafraîchisseur contenant une instance de la classe de statistiques que le fichier MOF crée, qui est Win32_PerfFormattedData_MemoryStatistics. Pour plus d’informations sur l’utilisation des scripts, veuillez consulter Actualisation des données WMI dans les scripts. Si vous travaillez en C++, consultez Accès aux données de performance en C++.
Remarque
SWbemRefreshableItem.Object doit être appelé après avoir obtenu l’élément de l’appel à SWbemRefresher.Add ou le script échouera. SWbemRefresher.Refresh doit être appelé avant d’entrer dans la boucle pour obtenir les valeurs de référence, ou les propriétés statistiques seront nulles (0) lors du premier passage.
' Connect to the Root\Cimv2 namespace
strComputer = "."
Set objService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
' Create a refresher
Set Refresher = CreateObject("WbemScripting.SWbemRefresher")
If Err <> 0 Then
WScript.Echo Err
WScript.Quit
End If
' Add the single instance of the statistics
' class to the refresher
Set obMemoryStatistics = Refresher.Add(objService, _
"Win32_PerfFormattedData_MemoryStatistics=@").Object
' Refresh once to obtain base values for cooking calculations
Refresher.Refresh
Const REFRESH_INTERVAL = 10
' Refresh every REFRESH_INTERVAL seconds
For I=1 to 3
WScript.Sleep REFRESH_INTERVAL * 1000
Refresher.Refresh
WScript.Echo "System memory statistics" _
& "(Available Megabytes) " _
& "for the past 100 seconds - pass " & i
WScript.Echo "Average = " _
& obMemoryStatistics.Average & VBNewLine & "Max = " _
& obMemoryStatistics.Max & VBNewLine & "Min = " _
& obMemoryStatistics.Min & VBNewLine & "Range = " _
& obMemoryStatistics.Range & VBNewLine & "Variance = " _
& obMemoryStatistics.Variance
Next
Exécution du script
La procédure suivante décrit comment exécuter l’exemple.
Pour exécuter le script d’exemple
- Copiez le code MOF et le script dans des fichiers sur votre ordinateur.
- Donnez au fichier MOF une extension .mof et au fichier de script une extension .vbs.
- Dans la ligne de commande, changez de répertoire vers le dossier où les fichiers sont stockés, et exécutez Mofcomp sur le fichier MOF. Par exemple, si vous nommez le fichier CalculatedData.mof, alors la commande est Mofcomp CalculatedData.mof.
- Exécutez le script.
Rubriques connexes