WMI 任务:性能监视

使用从性能计数器获取数据的 WMI 类来访问和刷新有关计算机性能的数据。 有关其他示例,请参阅 TechNet ScriptCenter,网址为 https://www.microsoft.com/technet 。 有关详细信息,请参阅 性能库和 WMI监视性能数据

本主题中所示的脚本示例仅从本地计算机获取数据。 有关如何使用脚本从远程计算机获取数据的详细信息,请参阅 连接到远程计算机上的 WMI

下面的过程介绍如何运行脚本。

运行脚本

  1. 复制代码并将其保存到扩展名为 .vbs 的文件中,如 filename.vbs。 确保文本编辑器不会将 .txt 扩展添加到文件。
  2. 打开命令提示符窗口并导航到保存该文件的目录。
  3. 在命令提示符下键入 cscript filename.vbs
  4. 如果无法访问事件日志,请检查是否正在从提升权限的命令提示符运行。 某些事件日志,例如安全事件日志,可能会受到 (UAC) 的用户访问控制的保护。

备注

默认情况下,cscript 会在命令提示符窗口中显示脚本的输出。 由于 WMI 脚本可能生成大量输出,因此可能需要将输出重定向到文件。 在命令提示符下键入 cscript filename.vbs > outfile.txt ,将 filename.vbs 脚本的输出重定向到 outfile.txt

下表列出了可用于从本地计算机获取各种类型的数据的脚本示例。

如何实现... WMI 类或方法
...获取可以在脚本中的 Perfmon 实用工具中看到的性能计数器数据? 使用名称以 Win32_PerfFormattedData 开头的类 " " ,例如Win32_PerfFormattedData_PerfProc_Process。 名称类似 PageFileBytes 的属性对应于 Perfmon 中看到的性能计数器。 "Win32_PerfFormattedData " 类计算计数器的最终值。
...为单个进程、磁盘驱动器和其他数据获取日常性能数据? 使用 Win32_PerfFormattedData_PerfProc_Process 或适当的格式化 性能计数器类SWbemObjectEx.Refresh_ 方法。 有关详细信息,请参阅 SWbemObject 的脚本编写
在 c + + 中,使用 IWbemConfigureRefresher:: AddObjectByPathIWbemRefresher:: Refresh。 有关详细信息,请参阅 监视性能数据
以下脚本将一直运行,直到重新启动计算机、WMI 停止或脚本停止。 若要手动停止脚本,请使用任务管理器停止该进程。 若要以编程方式停止它,请使用Win32_Process类中的Terminate方法。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
set PerfProcess = objWMIService.Get(_
    "Win32_PerfFormattedData_PerfProc_Process.Name='Idle'")

While (True) PerfProcess.Refresh_
Wscript.Echo PerfProcess.PercentProcessorTime Wscript.Sleep 1000 Wend

...获取所有进程的性能数据,无需重复轮询?

使用名称以 Win32_PerfFormattedData 开头的类 " " 和 SWbemRefresher 对象。 刷新器保留对象,因此您无需重复获取收集。 计算性能数据至少需要两个值,因为大多数计数器都是速率计数器。 第一次显示刷新器数据时,它是空的。

以下脚本会无限期运行,直到重新启动计算机、WMI 停止或脚本停止。 若要手动停止脚本,请使用任务管理器停止该进程。 若要以编程方式停止它,请使用Win32_Process类中的Terminate方法。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objProcessor = objRefresher.AddEnum _
    (objWMIService, _
    "Win32_PerfFormattedData_PerfOS_Processor").ObjectSet

While (True) objRefresher.Refresh For each RefreshItem in objRefresher For each objProcess in RefreshItem.ObjectSet Wscript.Echo objProcess.GetObjectText_ Next Next Wscript.Sleep 5000 Wend

...获取和计算 Windows 2000 上的进程的性能数据?

使用 " Win32_PerfRawData " 类,如 Win32_PerfRawData_PerfProc_Process。 获取特定进程的属性数据(如 PercentProcessorTime)两次。 查找在 CounterType 限定符中为属性指定的公式,并计算。 示例中的 CounterType PERF_100NSEC_TIMER_INV。 有关详细信息,请参阅 监视性能数据

以下脚本会无限期运行,直到重新启动计算机、WMI 停止或脚本停止。 若要手动停止脚本,请使用任务管理器停止该进程。 若要以编程方式停止它,请使用Win32_Process类中的Terminate方法。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

While (True) Set object1 = objWMIService.Get( _ "Win32_PerfRawData_PerfOS_Processor.Name='_Total'") N1 = object1.PercentProcessorTime D1 = object1.TimeStamp_Sys100NS Wscript.Sleep(1000) set object2 = objWMIService.Get( _ "Win32_PerfRawData_PerfOS_Processor.Name='_Total'") N2 = object2.PercentProcessorTime D2 = object2.TimeStamp_Sys100NS ' CounterType - PERF_100NSEC_TIMER_INV ' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100 PercentProcessorTime = (1 - ((N2 - N1)/(D2-D1)))*100 Wscript.Echo "% Processor Time=" , PercentProcessorTime Wend

脚本和应用程序的 WMI 任务

WMI c + + 应用程序示例

TechNet ScriptCenter