Abrufen statistischer Leistungsdaten
In WMI können Sie statistische Leistungsdaten basierend auf Daten in formatierten Leistungsklassen definieren, die von Win32_PerfFormattedData abgeleitet werden. Die verfügbaren Statistiken sind „Average“, „Minimum“, „Maximum“, „Range“ und „Variance“, wie in Statistische Leistungsindikatortypen definiert.
Die folgende Liste enthält die spezifischen Typen statistischer Leistungsindikatoren:
Die folgenden beiden Beispiele zeigen die Vorgehensweise:
- Erstellen Sie eine MOF-Datei, die eine Klasse berechneter Daten definiert.
- Schreiben Sie ein Skript, das eine Instanz der Klasse erstellt, und die Daten in der Instanz regelmäßig mit den neu berechneten statistischen Werten aktualisiert.
MOF-Datei
Im folgenden MOF-Codebeispiel wird eine neu berechnete Datenklasse namens Win32_PerfFormattedData_AvailableMBytes erstellt. Diese Klasse enthält Daten aus der Eigenschaft AvailableMBytes der rohen Klasse Win32_PerfRawData_PerfOS_Memory. Die Klasse Win32_PerfFormattedData_AvailableBytes definiert die Eigenschaften Average, Min, Max, Range und Variance.
Die MOF-Datei verwendet die Eigenschaftsqualifizierer für formatierte Leistungsindikatorklassen, um die Eigenschaftsdatenquelle und die Berechnungsformel zu definieren.
- Die Eigenschaft Average ruft Rohdaten aus der Eigenschaft Win32_PerfRawData_PerfOS_Memory.AvailableMBytes ab.
- Der Qualifizierer Counter für die Eigenschaft Average gibt die Rohdatenquelle an.
- Der Qualifizierer CookingType gibt die Formel COOKER_MIN zum Berechnen der Daten an.
- Der Qualifizierer SampleWindow gibt die Zahl der Proben vor der Durchführung der Berechnung an.
// 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;
};
Skript
Im folgenden Skriptcodebeispiel werden Statistiken zum verfügbaren Arbeitsspeicher (in Megabyte) über die zuvor erstellte MOF-Datei abgerufen. Das Skript verwendet das Skriptobjekt SWbemRefresher, um eine Aktualisierung zu erstellen, die eine einzelne Instanz der von der MOF-Datei erstellten Statistikklasse enthält: Win32_PerfFormattedData_MemoryStatistics. Weitere Informationen zur Verwendung von Skripts finden Sie unter Aktualisieren von WMI-Daten in Skripts. Wenn Sie in C++ arbeiten, finden Sie unter Zugreifen auf Leistungsdaten in C++ weitere Informationen.
Hinweis
SWbemRefreshableItem.Object muss aufgerufen werden, nachdem das Element aus dem Aufruf von SWbemRefresher.Add erhalten wurde. Ansonsten schlägt das Skript fehl. SWbemRefresher.Refresh muss aufgerufen werden, bevor die Schleife gestartet wird, um Basiswerte zu erhalten. Ansonsten sind die statistischen Eigenschaften beim ersten Durchgang null (0).
' 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
Ausführen des Skripts
Im Folgenden wird die Ausführung des Beispiels beschrieben.
So führen Sie das Beispielskript aus
- Kopieren Sie sowohl den MOF-Codedatei als auch die Skriptdatei zu Ihrem Computer.
- Geben Sie der MOF-Datei die Erweiterung .mog und der Skriptdatei die Erweiterung .vbs.
- Ändern Sie in der Befehlszeile das Verzeichnis, in dem die Dateien gespeichert werden, und führen Sie Mofcomp für die MOF-Datei aus. Wenn Sie der Datei beispielsweise den Namen CalculatedData.mof geben, lautet der Befehl "Mofcomp CalculatedData.mof.
- Führen Sie das Skript aus.
Zugehörige Themen