Udostępnij za pośrednictwem


Wywoływanie metody WMI

WMI dostarcza metody w interfejsie API COM i interfejsie API skryptów w celu uzyskania informacji lub manipulacji obiektami w systemie przedsiębiorstwa. Na przykład metoda skryptowa WMI SWbemServices.ExecQuery zapytuje o dane. Dostawcy mają również metody zdefiniowane w klasach, które rejestrują. Przykłady to metody Win32_LogicalDisk Chkdsk i ScheduleAutoChk dostarczone przez dostawcę Win32.

W tym temacie omówiono następujące sekcje:

Metody WMI w porównaniu z metodami dostawcy

Używając wywołań metody WMI połączonych z wywołaniami metody dostawcy , można pobierać i manipulować informacjami o swoim przedsiębiorstwie. Aby uzyskać więcej informacji, zobacz Wywoływanie metody WMI i Wywoływanie metody dostawcy.

Metody obiektu skryptowego usługi WMI SWbemObject mają specjalny stan, ponieważ mogą być stosowane do dowolnej klasy danych usługi WMI. Aby uzyskać więcej informacji, zobacz Scripting with SWbemObject.

Poniższy przykład kodu wywołuje metody WMI i dostawcy.

Następujące metody usługi WMI i dostawcy znajdują się w interfejsie API skryptów dla usługi WMI:

Możesz wyszukać kod, który może pojawić się w sekcji "Return" w sekcji Kody powrotu dla Win32_Service.

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

Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
    Return = objService.StopService()
    If Return <> 0 Then
        Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return 
    Else
       WScript.Echo "Succeeded"
    End If
Next

$colServices= Get-WmiObject -Class Win32_Service -Filter 'Name = &quot;Alerter&quot;'
foreach ($objService in $colServices)
{
    $objService.StopService()
}

tryby Method-Calling w usłudze WMI

Tryb wywołania półsynchronicznego zwykle zapewnia najlepszą równowagę między zabezpieczeniami a wydajnością.

Aby uzyskać więcej informacji na temat każdego z możliwych trybów, zobacz następujące artykuły:

Tryb synchroniczny

Tryb synchroniczny występuje, gdy program lub skrypty wstrzymują się do momentu, aż wywołanie metody zwróci obiekt kolekcji SWbemObjectSet. Usługa WMI kompiluje tę kolekcję w pamięci przed zwróceniem obiektu kolekcji do wywołującego programu lub skryptu.

Tryb synchroniczny może mieć negatywny wpływ na działanie programu lub skryptu na komputerze z uruchomionym programem lub skryptem. Na przykład synchroniczne pobieranie tysięcy zdarzeń z dziennika zdarzeń może zająć dużo czasu i używać dużej ilości pamięci, ponieważ usługa WMI tworzy obiekt z każdego zdarzenia, a następnie umieszcza te obiekty w kolekcji przed przekazaniem kolekcji do metody .

Należy wywoływać tylko metody, które nie zwracają dużych zestawów danych w trybie synchronicznym. Następujące metody SWbemServices można bezpiecznie wywoływać w trybie synchronicznym:

Wszystkie metody SWbemServices bez słowa "Async" w nazwie mogą być wywoływane w trybie synchronicznym, ustawiając wartość wbemFlagReturnWhenComplete w parametrze iFlags.

Tryb asynchroniczny

Tryb asynchroniczny występuje, gdy program lub skrypt będzie nadal działać po wywołaniu metody . Usługa WMI zwraca wszystkie obiekty z metody do obiektu SWbemSink podczas tworzenia każdego obiektu. Program wywołujący lub skrypt musi mieć obiekt SWbemSink oraz obsługę zdarzeń SWbemSink.OnObjectReady w celu przetworzenia zwróconych obiektów. Aby uzyskać więcej informacji na temat tworzenia programu obsługi zdarzeń dla trybu asynchronicznego, zobacz Odbieranie zdarzenia WMI.

Chociaż ten tryb nie ma wydajności i kary za zasoby trybu synchronicznego, tryb asynchroniczny może powodować poważne zagrożenia bezpieczeństwa, ponieważ wyniki przechowywane w SWbemSink obiektu mogą nie pochodzić z programu wywołującego lub skryptu. Usługa WMI obniża poziom uwierzytelniania w obiekcie SWbemSink, dopóki metoda nie odniesie sukcesu. Aby uzyskać więcej informacji na temat ograniczania tych zagrożeń bezpieczeństwa, zobacz Ustawianie zabezpieczeń w asynchronicznych wywołaniach.

Metody dołączane z wyrazem Async są metodami trybu asynchronicznego. Następujące metody to wywołania asynchroniczne:

Aby uzyskać więcej informacji na temat trybu asynchronicznego, zobacz:

Tryb półsynchroniczny

Tryb semisynchroniczny jest podobny do trybu asynchronicznego, ponieważ program lub skrypt nadal działa po wywołaniu metody. W trybie półsynchronicznym usługa WMI pobiera obiekty w tle, ponieważ skrypt lub program nadal działa. Funkcja WMI zwraca każdy obiekt zwrócony do metody wywołującej bezpośrednio po utworzeniu obiektu.

Ponieważ usługa WMI zarządza obiektem, tryb semisynchroniczny jest bezpieczniejszy niż tryb asynchroniczny. Jeśli jednak używasz trybu semisynchronicznego z ponad 1000 wystąpieniami, pobieranie wystąpień może zmonopolizować dostępne zasoby, co może obniżyć wydajność programu lub skryptu i komputera przy użyciu programu lub skryptu. Każdy obiekt pobiera niezbędne zasoby do momentu zwolnienia pamięci.

Aby obejść ten warunek, można wywołać metodę za pomocą parametru iFlags ustawionego za pomocą parametru wbemFlagForwardOnly i wbemFlagReturnImmediately flagi, aby usługa WMI zwróciła SWbemObjectSet. Tryb jednokierunkowy SWbemObjectSet eliminuje problem z wydajnością spowodowany dużym zestawem danych, zwalniając pamięć po enumeracji obiektu.

Każda metoda SWbemServices, której nie można wywołać w trybie synchronicznym lub asynchronicznym, jest wywoływana w trybie półsynchronicznym.

Następujące metody są wywoływane w trybie półsynchronicznym:

Aby uzyskać więcej informacji na temat trybu semisynchronicznego, zobacz Making a Semisynchronous Call with C++ and Making a Semisynchronous Call with VBScript.

Poprawa wydajności wyliczeń

Skrypty za pomocą SWbemObject

WbemFlagEnum