从 WMI 检索格式化的性能数据
Retrieve formatted performance data from WMI
我正在编写一个 WMI 提供程序,我已经设法检索了有关 计算机系统和硬件 类[=71 的所有信息=] 但无法从 性能计数器 类 获取我想要的数据。 (Win32 Classes)
查看 MSDN 文档并使用他们提供的示例,我想出了一个 shell 脚本,该脚本应该 return Win32_PerfFormattedData 的所有属性 抽象基础 class.
脚本:
$osClass = New-Object System.Management.ManagementClass Win32_PerfFormattedData
$osClass.Options.UseAmendedQualifiers = $true
# Get the Properties in the class
$properties = $osClass.Properties
"This class has {0} properties as follows:" -f $properties.count
# display the Property name, description, type, qualifiers and instance values
foreach ($property in $properties) {
"Property Name: {0}" -f $property.Name
"Description: {0}" -f $($property.Qualifiers["Description"].Value)
"Type: {0}" -f $property.Type
"-------"
}
(引用自here)
问题是我只是从它的基础中检索属性 class Win32_Perf
编辑
经过更多研究,我在 MSDN 上找到了这个:
The WMI formatted class name for a counter object is of the form "Win32_PerfFormattedData_service_name_object_name"
我正在尝试获取 Win32_PerfFormattedData 中的 service_name 和 object_name 在这些服务中。
我不确定获取属性是否是我现在想要的方式,但我找不到任何文档来获取服务。它们是一样的吗?而且,如果没有,我怎样才能获得我需要的信息? (service_name的 & object_name的)
我也在一些 C# 代码中尝试过这个并得到相同的结果:
ManagementClass processClass = new ManagementClass();
processClass.Path = new ManagementPath("Win32_PerfFormattedData");
PropertyDataCollection properties = processClass.Properties;
Console.WriteLine("\nProperties:");
foreach (PropertyData property in properties)
{
Console.WriteLine(property.Name);
}
然后我尝试检索 方法 来检查这是否是我想要的,但什么都没有 returned:
Console.WriteLine("Methods: ");
foreach (MethodData method in methods)
{
Console.WriteLine(method.Name);
}
编辑 2
是否有其他方法来检索此数据?我查看了所有关于 WMI 的 MSDN 文档,我认为要获得我想要的信息,我必须访问 class (Win32_PerfFormattedData)。我要检索的值的种类:
- CPU
- 内存
- 驱动器(SSD/HDD)
- 进程
- OS
- GPU
我检索了一些 classes,它们将提供有关其中一些的基本信息,但不会提供最新数据,例如每个逻辑处理器的温度。我设法从 class Win32_PerfFormattedData_PerfOS_Processor 获得了一项服务,它提供了每个逻辑处理器的负载百分比,但是 class 必须拥有我需要的其他服务。
Win32_PerfFormattedData_*
类 位于 "root\cimv2" 命名空间下。要枚举这些 类(并获取服务名称),您 运行 针对该名称空间的以下 WQL 查询:
SELECT * FROM meta_class WHERE __Class LIKE "Win32_PerfFormattedData%"
实际上您可以省略命名空间(至少 ManagementObjectSearcher
),在这种情况下到处都会进行搜索。以下是使用 C# 搜索 WMI 的方法:
void SearchWmi()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM meta_class WHERE __Class LIKE \"Win32_PerfFormattedData%\"");
foreach (ManagementClass wmiClass in searcher.Get())
{
Console.WriteLine(wmiClass["__CLASS"].ToString());
}
}
您需要添加对 System.Management
的引用以及相应的 using
指令。
您可以找到关于以下方面的性能数据:
CPU: Win32_PerfFormattedData_Processor
内存:Win32_PerfFormattedData_Memory
OS: Win32_PerfFormattedData_System
驱动器:Win32_PerfFormattedData_PerfDisk_*
进程:Win32_PerfFormattedData_PerfProc_*
我不知道 GPU。很可能它取决于驱动程序。
有许多带有 UI 和所有好东西的 WMI 资源管理器工具。你试过一些吗?我使用 "WMI Explorer 2.0"
您可以从here
下载
我正在编写一个 WMI 提供程序,我已经设法检索了有关 计算机系统和硬件 类[=71 的所有信息=] 但无法从 性能计数器 类 获取我想要的数据。 (Win32 Classes)
查看 MSDN 文档并使用他们提供的示例,我想出了一个 shell 脚本,该脚本应该 return Win32_PerfFormattedData 的所有属性 抽象基础 class.
脚本:
$osClass = New-Object System.Management.ManagementClass Win32_PerfFormattedData
$osClass.Options.UseAmendedQualifiers = $true
# Get the Properties in the class
$properties = $osClass.Properties
"This class has {0} properties as follows:" -f $properties.count
# display the Property name, description, type, qualifiers and instance values
foreach ($property in $properties) {
"Property Name: {0}" -f $property.Name
"Description: {0}" -f $($property.Qualifiers["Description"].Value)
"Type: {0}" -f $property.Type
"-------"
}
(引用自here)
问题是我只是从它的基础中检索属性 class Win32_Perf
编辑
经过更多研究,我在 MSDN 上找到了这个:
The WMI formatted class name for a counter object is of the form "Win32_PerfFormattedData_service_name_object_name"
我正在尝试获取 Win32_PerfFormattedData 中的 service_name 和 object_name 在这些服务中。
我不确定获取属性是否是我现在想要的方式,但我找不到任何文档来获取服务。它们是一样的吗?而且,如果没有,我怎样才能获得我需要的信息? (service_name的 & object_name的)
我也在一些 C# 代码中尝试过这个并得到相同的结果:
ManagementClass processClass = new ManagementClass();
processClass.Path = new ManagementPath("Win32_PerfFormattedData");
PropertyDataCollection properties = processClass.Properties;
Console.WriteLine("\nProperties:");
foreach (PropertyData property in properties)
{
Console.WriteLine(property.Name);
}
然后我尝试检索 方法 来检查这是否是我想要的,但什么都没有 returned:
Console.WriteLine("Methods: ");
foreach (MethodData method in methods)
{
Console.WriteLine(method.Name);
}
编辑 2
是否有其他方法来检索此数据?我查看了所有关于 WMI 的 MSDN 文档,我认为要获得我想要的信息,我必须访问 class (Win32_PerfFormattedData)。我要检索的值的种类:
- CPU
- 内存
- 驱动器(SSD/HDD)
- 进程
- OS
- GPU
我检索了一些 classes,它们将提供有关其中一些的基本信息,但不会提供最新数据,例如每个逻辑处理器的温度。我设法从 class Win32_PerfFormattedData_PerfOS_Processor 获得了一项服务,它提供了每个逻辑处理器的负载百分比,但是 class 必须拥有我需要的其他服务。
Win32_PerfFormattedData_*
类 位于 "root\cimv2" 命名空间下。要枚举这些 类(并获取服务名称),您 运行 针对该名称空间的以下 WQL 查询:
SELECT * FROM meta_class WHERE __Class LIKE "Win32_PerfFormattedData%"
实际上您可以省略命名空间(至少 ManagementObjectSearcher
),在这种情况下到处都会进行搜索。以下是使用 C# 搜索 WMI 的方法:
void SearchWmi()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM meta_class WHERE __Class LIKE \"Win32_PerfFormattedData%\"");
foreach (ManagementClass wmiClass in searcher.Get())
{
Console.WriteLine(wmiClass["__CLASS"].ToString());
}
}
您需要添加对 System.Management
的引用以及相应的 using
指令。
您可以找到关于以下方面的性能数据:
CPU: Win32_PerfFormattedData_Processor
内存:Win32_PerfFormattedData_Memory
OS: Win32_PerfFormattedData_System
驱动器:Win32_PerfFormattedData_PerfDisk_*
进程:Win32_PerfFormattedData_PerfProc_*
我不知道 GPU。很可能它取决于驱动程序。
有许多带有 UI 和所有好东西的 WMI 资源管理器工具。你试过一些吗?我使用 "WMI Explorer 2.0"
您可以从here
下载