Udostępnij za pośrednictwem


Odświeżanie danych usługi WMI w skryptach

W skryptach monitorowania można uniknąć kolejnych wywołań GetObject przy użyciu obiektu SWbemRefresher. Obiekt SWbemRefresher jest kontenerem, który może przechowywać kilka obiektów WMI, których dane mogą być odświeżane w jednym wywołaniu.

Użycie obiektu SWbemRefresher jest konieczne do uzyskania dokładnych danych z klas wydajności WMI, takich jak Win32_PerfFormattedData_PerfDisk_LogicalDisk, czy innych wstępnie zainstalowanych klas pochodzących z Win32_Perf.

Poniższa procedura opisuje sposób odświeżania danych w skryptach.

Aby odświeżyć dane w skryptach

  1. Wywołaj createObject, aby utworzyć obiekt odświeżania SWbemRefresher.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Połącz się z przestrzenią nazw WMI. Aby użyć wstępnie zainstalowanych klas wydajności Win32_Perf, połącz się z root\cimv2.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Dodaj pojedynczy obiekt (wywołaj metodę SWbemRefresher.Add) lub kolekcję (wywołaj metodę SWbemRefresher.AddEnum) do odświeżacza.

    Użyj wstępnie obliczonych klas danych pochodzących z Win32_PerfFormattedData, na przykład Win32_PerfFormattedData_PerfDisk_LogicalDisk zamiast Win32_PerfRawData_PerfDisk_LogicalDisk. W przeciwnym razie należy obliczyć wartości dla wszystkich właściwości innych niż proste liczniki.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Odśwież dane jednorazowo, aby uzyskać początkowe dane wydajności.

    Wywołaj metodę SWbemRefresher.Refresh lub metodę SWbemObjectEx.Refresh_.

    objRefresher.Refresh
    
  5. Jeśli monitorujesz wydajność i masz kolekcję w obiekcie odnawiania, przeprowadź iterację przez obiekty kolekcji.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Wyczyść elementy z modułu odświeżania, wywołując SWbemRefresher.DeleteAll lub usuń określone elementy, wywołując SwbemRefresher.Remove.

Poniższy przykład kodu VBScript pokazuje, jak odświeżyć pojedynczy obiekt na komputerze lokalnym. Skrypt tworzy kontener odświeżania i dodaje instancję enumeratora dla wystąpień Win32_PerfFormattedData_PerfProc_Process. Wywołanie Refresh jest wykonywane trzy razy, aby zademonstrować zmiany we właściwości PercentProcessorTime dla procesów korzystających z więcej niż jednego procentu czasu procesora.

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

Właściwość Index zwróconej SWbemRefreshableItem oznacza indeks obiektu znajdującego się w kolekcji odświeżania. Możesz wywołać właściwość SWbemRefreshableItem.IsSet, aby określić, czy element w odświeżeniu jest pojedynczym elementem, czy kolekcją. Aby uzyskać dostęp do pojedynczego elementu, użyj właściwości SWbemRefreshableItem.Object. Jeśli nie wykonasz wywołania polecenia SWbemRefreshableItem.Object, skrypt zakończy się niepowodzeniem podczas próby uzyskania dostępu do obiektu. Aby uzyskać dostęp do kolekcji, użyj właściwości SWbemRefreshableItem.ObjectSet.

klasy liczników wydajności

Uzyskiwanie dostępu do danych wydajności w skrypcie

Zadania WMI: Monitorowanie wydajności

monitorowanie danych wydajności