統計パフォーマンス データの取得
WMI では、Win32_PerfFormattedData から派生した書式設定されたパフォーマンス クラスのデータに基づいて、統計パフォーマンス データを定義できます。 使用可能な統計は、統計カウンターの種類で定義されている平均、最小、最大、範囲、分散です。
次の一覧には、特殊な統計カウンターの種類が含まれています。
次の例では、以下の方法を示します。
- 計算済みデータのクラスを定義する MOF ファイルを作成します。
- クラスのインスタンスを作成し、再計算された統計値を使用してインスタンス内のデータを定期的に更新するスクリプトを記述します。
MOF ファイル
次の MOF コード例では、Win32_PerfFormattedData_AvailableMBytes という名前で計算済みデータの新しいクラスを作成します。 このクラスには、生のクラス Win32_PerfRawData_PerfOS_Memory の AvailableMBytes プロパティのデータが含まれています。 Win32_PerfFormattedData_AvailableBytes クラスは、Average、Min、Max、Range、および Variance のプロパティを定義します。
MOF ファイルでは、書式設定されたパフォーマンス カウンター クラスのプロパティ修飾子を使用してプロパティ データ ソースと計算式を定義します。
- Average プロパティは、Win32_PerfRawData_PerfOS_Memory.AvailableMBytes プロパティから生データを取得します。
- Average プロパティの Counter 修飾子は、生データ ソースを指定します。
- CookingType 修飾子は、データを計算するための式 COOKER_MIN を指定します。
- SampleWindow 修飾子は、計算を実行する前に取得するサンプルの数を指定します。
// 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;
};
スクリプト
次のスクリプト コード例では、前に作成した MOF を使用して、使用可能なメモリに関する統計情報を MB 単位で取得します。 このスクリプトでは、SWbemRefresher スクリプト オブジェクトを使用して、MOF ファイルが作成する統計クラスの 1 つのインスタンス (Win32_PerfFormattedData_MemoryStatistics) を含むリフレッシャーを作成します。 スクリプトの使用の詳細については、「スクリプトでの WMI データの更新」を参照してください。 C++ で作業している場合は、「C++ でのパフォーマンス データへのアクセス」を参照してください。
Note
SWbemRefreshableItem.Object は、SWbemRefresher.Add の呼び出しから項目を取得した後に呼び出す必要があります。これを行わないと、スクリプトは失敗します。 SWbemRefresher.Refresh は、ベースライン値を取得するためにループに入る前に呼び出す必要があります。これを行わないと、最初のパスで統計プロパティがゼロ (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
スクリプトの実行
サンプルの実行方法を次の手順で説明します。
サンプル スクリプトの実行方法
- MOF コードとスクリプトの両方をコンピューター上のファイルにコピーします。
- MOF ファイルに .mof 拡張子を付け、スクリプト ファイルに .vbs の説明を付けます。
- コマンド ラインで、ファイルが格納されているディレクトリに移動し、MOF ファイルで Mofcomp を実行します。 たとえば、ファイルに CalculatedData.mof という名前を付けた場合、コマンドは Mofcomp CalculatedData.mof になります。
- スクリプトを実行します。
関連トピック