Aktualizace dat rozhraní WMI ve skriptech
Ve skriptech monitorování se můžete vyhnout následným voláním GetObject pomocí objektu SWbemRefresher. SWbemRefresher objekt je kontejner, který může obsahovat několik objektů WMI, jejichž data je možné aktualizovat v jednom volání.
K získání přesných dat z tříd výkonu rozhraní WMI, jako jsou Win32_PerfFormattedData_PerfDisk_LogicalDisk nebo jiné předinstalované třídy odvozené z Win32_Perf, je nutné použít SWbemRefresher objekt .
Následující postup popisuje, jak aktualizovat data ve skriptech.
Aktualizace dat ve skriptech
Voláním CreateObject vytvořte objekt obnovy SWbemRefresher.
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Připojte se k WMI namespace. Chcete-li použít předinstalované třídy výkonu Win32_Perf, připojte se k root\cimv2.
Set objServicesCimv2 = GetObject("winmgmts:\\" _ & strComputer & "\root\cimv2")
Přidejte jeden objekt (volání SWbemRefresher.Add) nebo kolekci (volání SWbemRefresher.AddEnum) do refresheru.
Použijte předem vypočtené datové třídy odvozené z Win32_PerfFormattedData, například Win32_PerfFormattedData_PerfDisk_LogicalDisk místo Win32_PerfRawData_PerfDisk_LogicalDisk. V opačném případě je nutné vypočítat hodnoty pro všechny ostatní vlastnosti kromě jednoduchých počítadel.
Set objRefreshableItem = _ objRefresher.AddEnum(objServicesCimv2 , _ "Win32_PerfFormattedData_PerfProc_Process")
Aktualizujte data jednou, abyste získali počáteční údaje o výkonu.
Volejte metodu SWbemRefresher.Refresh nebo obecnou metodu SWbemObjectEx.Refresh_.
objRefresher.Refresh
Pokud monitorujete výkon a máte kolekci v obnovovacím objektu, projděte si objekty kolekce.
For Each Process in objRefreshableItem.ObjectSet If Process.PercentProcessorTime > 1 then WScript.Echo Process.Name & vbnewLine _ & Process.PercentProcessorTime & "%" End If Next
Vymažte položky z aktualizačního nástroje voláním SWbemRefresher.DeleteAll nebo odeberte konkrétní položky voláním SwbemRefresher.Remove.
Následující příklad kódu VBScript ukazuje, jak aktualizovat jeden objekt v místním počítači. Skript vytvoří kontejner pro aktualizaci a přidá instanci enumerátoru pro instance Win32_PerfFormattedData_PerfProc_Process. Volání Refresh se provádí třikrát, aby bylo znázorněno změny ve vlastnosti PercentProcessorTime pro procesy používající více než jedno procento času procesoru.
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
Vlastnost Index vrácených SWbemRefreshableItem představuje index objektu v kolekci obnovovače. Můžete použít vlastnost SWbemRefreshableItem.IsSet k určení, zda je položka v osvěžovacím nástroji jedna položka nebo kolekce. Pro přístup k jedné položce použijte SWbemRefreshableItem.Object vlastnost. Pokud neprovedete volání na SWbemRefreshableItem.Object, skript selže při pokusu o přístup k objektu. Pro přístup k kolekci použijte SWbemRefreshableItem.ObjectSet vlastnost.
Související témata