Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No WMI, você pode definir dados de desempenho estatístico com base em dados em classes de desempenho formatadas derivadas de Win32_PerfFormattedData. As estatísticas disponíveis são média, mínimo, máximo, intervalo e variância, conforme definido em Tipos de Contador Estatístico.
A lista a seguir inclui os tipos especiais de contadores estatísticos:
Os exemplos a seguir mostram como:
- Crie um arquivo MOF que defina uma classe de dados calculados.
- Escreva um script que crie uma instância da classe e atualize periodicamente os dados na instância com os valores estatísticos recalculados.
Arquivo MOF
O exemplo de código MOF a seguir cria uma nova classe de dados calculados chamada Win32_PerfFormattedData_AvailableMBytes. Essa classe contém dados da propriedade AvailableMBytes da classe bruta Win32_PerfRawData_PerfOS_Memory. A classe Win32_PerfFormattedData_AvailableBytes define as propriedades Average, Min, Max, e Variance.
O arquivo MOF usa os Qualificadores de propriedade para classes de contadores de desempenho formatados para definir a fonte de dados de propriedade e a fórmula de cálculo.
- A propriedade Average obtém dados brutos da propriedade Win32_PerfRawData_PerfOS_Memory.AvailableMBytes.
- O qualificadorCounterpara a propriedade Average especifica a fonte de dados brutos.
- O qualificador CookingType especifica a fórmula COOKER_MIN para calcular os dados.
- O qualificador SampleWindow especifica quantas amostras devem ser coletadas antes de executar o cálculo.
// 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
O exemplo de código de script a seguir obtém estatísticas sobre a memória disponível, em megabytes, usando o MOF criado anteriormente. O script usa o objeto de script SWbemRefresher para criar um atualizador que contém uma instância da classe de estatísticas que o arquivo MOF cria, que é Win32_PerfFormattedData_MemoryStatistics. Para obter mais informações sobre como usar scripts, consulte Atualizando dados WMI em scripts. Se estiver trabalhando em C++, consulte Acessando dados de desempenho em C++.
Observação
SWbemRefreshableItem.Object deve ser chamado depois de obter o item da chamada para SWbemRefresher.Add ou o script falhará. SWbemRefresher.Refresh deve ser chamado antes de entrar no loop para obter valores de linha de base, ou as propriedades estatísticas são zero (0) na primeira passagem.
' 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
Executar o script
O procedimento a seguir descreve como executar o exemplo.
Para executar o script de exemplo:
- Copie o código MOF e o script para arquivos em seu computador.
- Dê ao arquivo MOF uma extensão .mof e ao arquivo de script uma descrição .vbs.
- Na linha de comando, mude para o diretório em que os arquivos estão armazenados e execute Mofcomp no arquivo MOF. Por exemplo, se você nomear o arquivo CalculatedData.mof, o comando será Mofcomp CalculatedData.mof
- Execute o script.
Tópicos relacionados