Een WMI-methode aanroepen
WMI levert methoden in de COM API- en de script-API- om informatie te verkrijgen of objecten in een bedrijfssysteem te bewerken. Bijvoorbeeld, de WMI-scriptmethode SWbemServices.ExecQuery voert queries uit voor gegevens. Providers hebben ook methoden gedefinieerd in de klassen die ze registreren. Voorbeelden zijn de Win32_LogicalDisk methoden Chkdsk- en ScheduleAutoChk- geleverd door de Win32-provider.
In dit onderwerp worden de volgende secties besproken:
WMI-methoden vergeleken met providermethoden
Door WMI-methode te gebruiken aanroepen in combinatie met providermethode aanroepen, kunt u informatie over uw onderneming ophalen en bewerken. Zie Het aanroepen van een WMI-methode en het aanroepen van een providermethodevoor meer informatie.
De methoden van het WMI-scriptobject SWbemObject een speciale status hebben omdat ze kunnen worden toegepast op elke WMI-gegevensklasse. Zie Scripting met SWbemObjectvoor meer informatie.
In het volgende codevoorbeeld worden zowel WMI- als providermethoden aangeroepen.
De volgende WMI- en providermethoden bevinden zich in de Scripting-API voor WMI-:
- objWMIService.ExecQuery roept de WMI-scriptmethode aan SWbemServices.ExecQuery-
- objService.StopService() de providermethode aanroept Win32_Service.StopService
U kunt de code opzoeken die kan worden weergegeven in "Return" in de sectie Retourcodes voor 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 = "Alerter"'
foreach ($objService in $colServices)
{
$objService.StopService()
}
Method-Calling modi in WMI
De semisynchrone belmodus biedt meestal de beste balans tussen beveiliging en prestaties.
Zie het volgende voor meer informatie over elk van de mogelijke modi:
Synchrone modus
De synchrone modus treedt op wanneer het programma of het script wordt gepauzeerd totdat de methode aanroep een verzamelingsobject SWbemObjectSet retourneert. WMI bouwt deze verzameling in het geheugen voordat het verzamelingsobject wordt geretourneerd naar het aanroepende programma of script.
Synchrone modus kan een nadelig effect hebben op programma- of scriptprestaties op de computer waarop het programma of script wordt uitgevoerd. Het synchroon ophalen van duizenden gebeurtenissen uit het gebeurtenislogboek kan bijvoorbeeld lang duren en veel geheugen gebruiken omdat WMI een object maakt op basis van elke gebeurtenis en deze objecten vervolgens in een verzameling plaatst voordat de verzameling wordt doorgegeven aan de methode.
U moet alleen methoden aanroepen die geen grote gegevenssets retourneren in de synchrone modus. De volgende SWbemServices methoden kunnen veilig worden aangeroepen in de synchrone modus:
Elke SWbemServices methode zonder het woord "Async" in de naam kan in synchrone modus worden aangeroepen door de wbemFlagReturnWhenComplete-waarde in de iFlags-parameter in te stellen.
Asynchrone modus
De asynchrone modus treedt op wanneer het programma of script blijft worden uitgevoerd nadat de methode is aangeroepen. WMI retourneert alle objecten uit de methode naar een SWbemSink object zodra elk object is aangemaakt. Het aanroepende programma of script moet een SWbemSink--object en een SWbemSink.OnObjectReady gebeurtenishandler hebben om de geretourneerde objecten te verwerken. Zie Een WMI-gebeurtenis ontvangenvoor meer informatie over het maken van een evenementenhandler in de asynchrone modus.
Hoewel deze geen prestatie- en middelenbelasting van de synchrone-modus kent, kan de asynchrone-modus ernstige beveiligingsrisico's opleveren omdat de resultaten die zijn opgeslagen in het SWbemSink-object mogelijk niet van het aanroepende programma of script afkomstig zijn. WMI verlaagt het verificatieniveau op het SWbemSink object totdat de methode slaagt. Zie Beveiliging instellen voor een asynchrone aanroepvoor meer informatie over het beperken van deze beveiligingsrisico's.
Methoden die zijn toegevoegd aan het woord Async zijn methoden voor asynchrone modus. De volgende methoden zijn asynchrone aanroepen:
- SWbemServices.AssociatorsOfAsync
- SWbemServices.DeleteAsync
- SWbemServices.ExecMethodAsync-
- SWbemServices.ExecNotificationQueryAsync
- SWbemServices.ExecQueryAsync
- SWbemServices.InstancesOfAsync
- SWbemServices.ReferencesToAsync-
- SWbemServices.SubclassesOfAsync
Zie voor meer informatie over de asynchrone modus:
Semisynchrone modus
Semisynchrone modus is vergelijkbaar met asynchrone modus omdat het programma of script blijft worden uitgevoerd nadat de methode is aangeroepen. In de semisynchrone modus haalt WMI de objecten op de achtergrond op als uw script of programma blijft worden uitgevoerd. WMI retourneert elk object naar de aanroepmethode direct nadat het is aangemaakt.
Omdat WMI het object beheert, is de semisynchrone modus veiliger dan de asynchrone modus. Als u echter de semisynchrone modus gebruikt met meer dan 1000 instanties, kan het ophalen van instanties de beschikbare resources opslokken, wat de prestaties van het programma of script en de computer die het programma of script gebruikt, kan verminderen. Elk object neemt de benodigde resources in beslag totdat het geheugen wordt vrijgegeven.
Als u deze voorwaarde wilt omzeilen, kunt u de methode aanroepen met de parameter iFlags, waarbij de wbemFlagForwardOnly en wbemFlagReturnImmediately vlaggen zijn ingesteld, om WMI te instrueren om een alleen-doorstuur SWbemObjectSette retourneren. Een forward-only SWbemObjectSet elimineert het prestatieprobleem dat wordt veroorzaakt door een grote gegevensset door het geheugen vrij te geven nadat het object is geïnventariseerd.
Elke SWbemServices methode die niet kan worden aangeroepen in de synchrone of asynchrone modus, wordt aangeroepen in de semisynchrone modus.
De volgende methoden worden aangeroepen in de semisynchrone modus:
- SWbemServices.AssociatorsOf
- SWbemServices.Delete
- SWbemServices.ExecMethod
- SWbemServices.ExecNotificationQuery-
- SWbemServices.ExecQuery
- SWbemServices.Get
- SWbemServices.InstancesOf
- SWbemServices.ReferencesTo
- SWbemServices.SubclassesOf
- SWbemServices.Put
Zie Een semisynchrone aanroep maken met C++ en het maken van een semisynchrone aanroep met VBScript-voor meer informatie over de semisynchrone modus.
Verwante onderwerpen