Chiamata di un metodo WMI

WMI fornisce metodi nell'API COM e nell'API di scripting per ottenere informazioni o modificare oggetti in un sistema aziendale. Ad esempio, il metodo di scripting WMI SWbemServices.ExecQuery esegue query per i dati. I provider dispongono anche di metodi definiti nelle classi registrate. Esempi sono i metodi Win32_LogicalDiskChkdsk e ScheduleAutoChk forniti dal provider Win32.

In questo argomento vengono illustrate le sezioni seguenti:

Metodi WMI confrontati con i metodi del provider

Usando le chiamate al metodo WMI combinate con le chiamate al metodo del provider , è possibile recuperare e modificare le informazioni sull'organizzazione. Per altre informazioni, vedere Chiamata di un metodo WMI e chiamata di un metodo provider.

I metodi dell'oggetto scripting WMI SWbemObject hanno uno stato speciale perché possono essere applicati a qualsiasi classe di dati WMI. Per altre informazioni, vedere Creazione di script con SWbemObject.

Nell'esempio di codice seguente vengono chiamati sia i metodi WMI che i metodi del provider.

I metodi WMI e provider seguenti si trovano nell'API di scripting per WMI:

È possibile cercare il codice che può essere visualizzato in "Return" nella sezione Codici restituiti per 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()
}

modalità Method-Calling in WMI

La modalità di chiamata semisynchrono offre in genere il miglior equilibrio tra sicurezza e prestazioni.

Per altre informazioni su ognuna delle modalità possibili, vedere quanto segue:

Modalità sincrona

La modalità sincrona si verifica quando il programma o gli script vengono sospesi finché la chiamata al metodo non restituisce un insieme SWbemObjectSet . WMI compila questa raccolta in memoria prima di restituire l'oggetto raccolta al programma o allo script chiamante.

La modalità sincrona può avere un effetto negativo sulle prestazioni del programma o dello script nel computer che esegue il programma o lo script. Ad esempio, il recupero sincrono di migliaia di eventi dal registro eventi può richiedere molto tempo e usare molta memoria perché WMI crea un oggetto da ogni evento e quindi li inserisce in una raccolta prima di passare la raccolta al metodo .

È consigliabile chiamare solo i metodi che non restituiscono set di dati di grandi dimensioni in modalità sincrona. I metodi SWbemServices seguenti possono essere chiamati in modo sicuro in modalità sincrona:

Qualsiasi metodo SWbemServices senza la parola "Async" nel nome può essere chiamato in modalità sincrona impostando il valore wbemFlagReturnWhenComplete nel parametro iFlags .

Modalità asincrona

La modalità asincrona si verifica quando il programma o lo script continua a essere eseguito dopo aver chiamato il metodo . WMI restituisce tutti gli oggetti dal metodo a un oggetto SWbemSink durante la creazione di ogni oggetto. Il programma chiamante o lo script deve avere un oggetto SWbemSink e un gestore eventi SWbemSink.OnObjectReady per elaborare gli oggetti restituiti. Per altre informazioni sulla creazione di un gestore eventi per la modalità asincrona, vedere Ricezione di un evento WMI.

Anche se questa modalità non presenta la riduzione delle prestazioni e delle risorse della modalità sincrona, la modalità asincrona può creare gravi rischi di sicurezza perché i risultati archiviati nell'oggetto SWbemSink potrebbero non provenire dal programma chiamante o dallo script. WMI riduce il livello di autenticazione nell'oggetto SWbemSink fino a quando il metodo non riesce. Per altre informazioni su come attenuare questi rischi per la sicurezza, vedere Impostazione della sicurezza in una chiamata asincrona.

I metodi accodati con la parola Async sono metodi per la modalità asincrona. I metodi seguenti sono chiamate asincrone:

Per altre informazioni sulla modalità asincrona, vedere:

Modalità semisynchronous

La modalità semisynchronous è simile alla modalità asincrona in quanto il programma o lo script continua a essere eseguito dopo aver chiamato il metodo . In modalità semisynchronous, WMI recupera gli oggetti in background man mano che lo script o il programma continua a essere eseguito. WMI restituisce ogni oggetto restituito al metodo chiamante subito dopo la creazione dell'oggetto.

Poiché WMI gestisce l'oggetto, la modalità semisynchronous è più sicura rispetto alla modalità asincrona. Tuttavia, se si usa la modalità semisynchronous con più di 1.000 istanze, il recupero dell'istanza può monopolizzare le risorse disponibili, che possono compromettere le prestazioni del programma o dello script e del computer usando il programma o lo script. Ogni oggetto occupa le risorse necessarie fino a quando non viene rilasciata la memoria.

Per risolvere questa condizione, è possibile chiamare il metodo con il parametro iFlags impostato con wbemFlagForwardOnly e wbemFlagReturnImmediately flag per indicare a WMI di restituire un oggetto SWbemObjectSet forward-only. Un oggetto SWbemObjectSet forward-only elimina il problema di prestazioni causato da un set di dati di grandi dimensioni rilasciando la memoria dopo l'enumerazione dell'oggetto.

Qualsiasi metodo SWbemServices che non può essere chiamato in modalità sincrona o asincrona viene chiamato in modalità semisynchronous.

I metodi seguenti vengono chiamati in modalità semisynchronous:

Per altre informazioni sulla modalità semisynchronous, vedere Making a Semisynchronous Call with C++ and Making a Semisynchronous Call with VBScript .For more information about semisynchronous mode, see Making a Semisynchronous Call with C++ and Making a Semisynchronous Call with VBScript.

Miglioramento delle prestazioni dell'enumerazione

Scripting con SWbemObject

WbemFlagEnum