在脚本中刷新 WMI 数据
在监视脚本中,可以使用 SWbemRefresher 对象避免连续调用 GetObject。 SWbemRefresher 对象是一个容器,可以保存多个 WMI 对象,WMI 对象的数据可以在一次调用中获得刷新。
需要使用 SWbemRefresher 对象才能从 WMI 性能类(例如 Win32_PerfFormattedData_PerfDisk_LogicalDisk 或派生自 Win32_Perf 的其他预安装类)中获取准确数据。
以下过程介绍如何刷新脚本中的数据。
刷新脚本中的数据
调用 CreateObject 以创建 SWbemRefresher 刷新程序对象。
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
连接到 WMI 命名空间。 若要使用预安装的 Win32_Perf 性能类,请连接到 root\cimv2。
Set objServicesCimv2 = GetObject("winmgmts:\\" _ & strComputer & "\root\cimv2")
向刷新程序添加单个对象(调用 SWbemRefresher.Add)或集合(调用 SWbemRefresher.AddEnum)。
使用从 Win32_PerfFormattedData 派生的预先计算的数据类,例如,使用 Win32_PerfFormattedData_PerfDisk_LogicalDisk 而非 Win32_PerfRawData_PerfDisk_LogicalDisk。 否则,必须计算除简单计数器以外的所有属性的值。
Set objRefreshableItem = _ objRefresher.AddEnum(objServicesCimv2 , _ "Win32_PerfFormattedData_PerfProc_Process")
刷新数据一次以获取初始性能数据。
调用 SWbemRefresher.Refresh 方法或泛型 SWbemObjectEx.Refresh_ 方法。
objRefresher.Refresh
如果你要监视性能,而你在刷新程序对象中有一个集合,请循环访问集合对象。
For Each Process in objRefreshableItem.ObjectSet If Process.PercentProcessorTime > 1 then WScript.Echo Process.Name & vbnewLine _ & Process.PercentProcessorTime & "%" End If Next
通过调用 SWbemRefresher.DeleteAll 清除刷新程序中的项,或通过调用 SwbemRefresher.Remove 删除特定项。
以下 VBScript 代码示例演示如何刷新本地计算机上的单个对象。 该脚本创建刷新程序容器,并为 Win32_PerfFormattedData_PerfProc_Process 实例添加枚举器的实例。 Refresh 调用进行了 3 次,以演示那些使用超过百分之一的处理器时间的进程的 PercentProcessorTime 属性的变化。
On Error Resume Next
strComputer = "."
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set objServicesCimv2 = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
If Err = 0 Then
Set objRefreshableItem = _
objRefresher.AddEnum(objServicesCimv2 ,"Win32_PerfFormattedData_PerfProc_Process")
objRefresher.Refresh
' Loop through the processes three times to locate
' and display all the process currently using
' more than 1 % of the process time. Refresh on each pass.
For i = 1 to 3
Wscript.Echo "Refresh number " & i
objRefresher.Refresh
For Each Process in objRefreshableItem.ObjectSet
If Process.PercentProcessorTime > 1 then
WScript.Echo Process.Name & vbnewLine & Process.PercentProcessorTime & "%"
End If
Next
Next
Else
WScript.Echo Err.Description
End If
返回的 SWbemRefreshableItem 的 Index 属性表示刷新程序集合中对象的索引。 可以调用 SWbemRefreshableItem.IsSet 属性来确定刷新程序中的项是单个项还是集合。 若要访问单个项,请使用 SWbemRefreshableItem.Object 属性。 如果你不调用 SWbemRefreshableItem.Object,则脚本会在你尝试访问对象时失败。 若要访问集合,请使用 SWbemRefreshableItem.ObjectSet 属性。
相关主题