Dela via


Anropa en metod för WMI

WMI tillhandahåller metoder i COM API- och skript-API:et för att hämta information eller manipulera objekt i ett företagssystem. Till exempel WMI-skriptmetoden SWbemServices.ExecQuery hämtar data. Leverantörer har också metoder som definierats i de klasser som de registrerar. Exempel är Win32_LogicalDisk metoder Chkdsk och ScheduleAutoChk som tillhandahålls av Win32-providern.

Följande avsnitt beskrivs i det här avsnittet:

WMI-metoder jämfört med providermetoder

Genom att använda WMI-metod anrop i kombination med providermetod anrop kan du hämta och ändra information om ditt företag. Mer information finns i Anropa en WMI-metod och Anropa en Providermetod.

Metoderna för WMI-skriptobjektet SWbemObject ha en särskild status eftersom de kan tillämpas på alla WMI-dataklasser. Mer information finns i Scripting with SWbemObject.

I följande kodexempel anropas både WMI- och providermetoder.

Följande WMI- och providermetoder finns i api:et Scripting för WMI:

Du kan leta upp koden som kan visas i "Retur" i avsnittet Returkoder för 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()
}

Method-Calling lägen i WMI

Det semisynkrona samtalsläget ger vanligtvis den bästa balansen mellan säkerhet och prestanda.

Mer information om var och en av de möjliga lägena finns i följande:

Synkront läge

Synkront läge inträffar när programmet eller skripten pausar tills metodanropet returnerar ett SWbemObjectSet samlingsobjekt. WMI skapar den här samlingen i minnet innan samlingsobjektet returneras till det anropande programmet eller skriptet.

Synkront läge kan ha en negativ effekt av program- eller skriptprestanda på datorn som kör programmet eller skriptet. Till exempel kan det ta lång tid att hämta tusentals händelser från händelseloggen synkront och använda mycket minne eftersom WMI skapar ett objekt från varje händelse och sedan placerar objekten i en samling innan samlingen skickas till metoden.

Du bör bara anropa metoder som inte returnerar stora datamängder i synkront läge. Följande SWbemServices metoder kan anropas säkert i synkront läge:

Alla SWbemServices metoder utan ordet "Async" i namnet kan anropas i synkront läge genom att ange värdet wbemFlagReturnWhenComplete i parametern iFlags.

Asynkront läge

Asynkront läge inträffar när programmet eller skriptet fortsätter att köras efter att metoden anropats. WMI returnerar alla objekt från metoden till ett SWbemSink objekt när varje objekt skapas. Det anropande programmet eller skriptet måste ha ett SWbemSink--objekt och ett SWbemSink.OnObjectReady händelsehanterare för att bearbeta de returnerade objekten. Mer information om hur du skapar en händelsehanterare för asynkront läge finns i Ta emot en WMI-händelse.

Även om det här läget inte har prestanda och resursstraff för synkront läge, kan asynkront läge skapa allvarliga säkerhetsrisker eftersom resultaten som lagras i SWbemSink-objektet kanske inte kommer från det anropande programmet eller skriptet. WMI sänker autentiseringsnivån på SWbemSink-objektet tills metoden lyckas. Mer information om hur du minimerar dessa säkerhetsrisker finns i Ställa in säkerhet på ett asynkront anrop.

Metoder som läggs till med ordet Async är metoder för asynkront läge. Följande metoder är asynkrona anrop:

Mer information om asynkront läge finns i:

Semisynkront läge

Semisynkront läge liknar asynkront läge eftersom programmet eller skriptet fortsätter att köras efter att metoden anropats. I semisynkront läge hämtar WMI objekten i bakgrunden när skriptet eller programmet fortsätter att köras. WMI returnerar varje objekt som returneras till anropande metod direkt efter att objektet har skapats.

Eftersom WMI hanterar objektet är semisynkront läge säkrare än asynkront läge. Men om du använder semisynkront läge med fler än 1 000 instanser kan instanshämtning monopolisera tillgängliga resurser, vilket kan försämra programmets eller skriptets prestanda och datorn med hjälp av programmet eller skriptet. Varje objekt tar upp nödvändiga resurser tills minnet frigörs.

För att kringgå det här villkoret kan du anropa metoden och använda parametern iFlags tillsammans med wbemFlagForwardOnly och wbemFlagReturnImmediately flaggor, så att WMI returnerar en framåtriktad SWbemObjectSet. Ett framåt-endast SWbemObjectSet eliminerar prestandaproblemet som orsakas av en stor datauppsättning genom att frigöra minnet efter att objektet har blivit uppräknat.

Alla SWbemServices metod som inte kan anropas i synkront eller asynkront läge anropas i semisynkront läge.

Följande metoder anropas i semisynkront läge:

Mer information om semisynkront läge finns i Att göra ett semisynkront anrop med C++ och Att göra ett semisynkront anrop med VBScript.

Förbättra Uppräkningsprestanda

Skripthantering med SWbemObject

WbemFlagEnum