Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O WMI fornece métodos na API COM e na API de scripting para obter informações ou manipular objetos em um sistema empresarial. Por exemplo, o método de script WMI SWbemServices.ExecQuery consulta para obter dados. Os provedores também têm métodos definidos nas classes que registram. Exemplos são os métodos Win32_LogicalDiskChkdsk e ScheduleAutoChk fornecidos pelo provedor Win32.
As seguintes seções são discutidas neste tópico:
Métodos WMI em comparação com métodos de provedor
Usando método WMI chamadas combinadas com método de provedor chamadas, você pode recuperar e manipular informações sobre sua empresa. Para obter mais informações, consulte chamando um método WMI e chamando um método de provedor.
Os métodos do objeto de script WMI SWbemObject têm um status especial porque podem ser aplicados a qualquer classe de dados WMI. Para obter mais informações, consulte Scripting with SWbemObject.
O exemplo de código a seguir chama ambos os métodos WMI e do fornecedor.
Os seguintes métodos WMI e provedor estão localizados no Scripting API for WMI:
- objWMIService.ExecQuery chama o método de script WMI SWbemServices.ExecQuery
- objService.StopService() chama o método de provedor Win32_Service.StopService
Você pode consultar o código que pode aparecer em "Retorno" na secção Códigos de Retorno para 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()
}
Modos Method-Calling no WMI
O modo de chamada semissíncrona geralmente fornece o melhor equilíbrio entre segurança e desempenho.
Para obter mais informações sobre cada um dos modos possíveis, consulte o seguinte:
Modo síncrono
O modo síncrono ocorre quando o programa ou scripts pausam até que a chamada de método retorne um objeto de coleção SWbemObjectSet. O WMI cria essa coleção na memória antes de retornar o objeto de coleção para o programa ou script de chamada.
O modo síncrono pode ter um efeito adverso do desempenho do programa ou script no computador que executa o programa ou script. Por exemplo, recuperar de forma síncrona milhares de eventos do log de eventos pode levar muito tempo e usar muita memória porque o WMI cria um objeto de cada evento e, em seguida, coloca esses objetos em uma coleção antes de passar a coleção para o método.
Você só deve chamar métodos que não retornem grandes conjuntos de dados no modo síncrono. Os seguintes métodos SWbemServices podem ser chamados com segurança no modo síncrono:
Qualquer método SWbemServices sem a palavra "Async" no nome pode ser chamado no modo síncrono definindo o valor wbemFlagReturnWhenComplete no parâmetro iFlags.
Modo assíncrono
O modo assíncrono ocorre quando o programa ou script continua a ser executado depois de chamar o método. À medida que cada objeto é criado, o WMI retorna todos os objetos do método para um objeto SWbemSink . O programa ou script de chamada deve ter um objeto SWbemSink e um manipulador de eventosSWbemSink.OnObjectReady para processar os objetos retornados. Para obter mais informações sobre como criar um manipulador de eventos para o modo assíncrono, consulte Recebendo um evento WMI.
Embora esse modo não tenha a penalidade de desempenho e recursos do modo síncrono, o modo assíncrono pode criar sérios riscos de segurança porque os resultados armazenados no objeto SWbemSinkpodem não vir do programa ou script de chamada. O WMI reduz o nível de autenticação no objeto SWbemSink até que o método seja bem-sucedido. Para obter mais informações sobre como reduzir esses riscos de segurança, consulte Definindo a segurança em uma chamada assíncrona.
Os métodos acrescentados com a palavra Async são métodos para o modo assíncrono. Os seguintes métodos são chamadas assíncronas:
- SWbemServices.AssociatorsOfAsync
- SWbemServices.DeleteAsync
- SWbemServices.ExecMethodAsync
- SWbemServices.ExecNotificationQueryAsync
- SWbemServices.ExecQueryAsync
- SWbemServices.InstancesOfAsync
- SWbemServices.ReferencesToAsync
- SWbemServices.SubclassesOfAsync
Para obter mais informações sobre o modo assíncrono, consulte:
Modo Semissíncrono
O modo semissíncrono é semelhante ao modo assíncrono, na medida em que o programa ou script continua a ser executado depois de chamar o método. No modo semissíncrono, o WMI recupera os objetos em segundo plano à medida que o script ou programa continua a ser executado. O WMI retorna cada objeto retornado ao método de chamada logo após a criação do objeto.
Como o WMI gerencia o objeto, o modo semissíncrono é mais seguro do que o modo assíncrono. No entanto, se você usar o modo semissíncrono com mais de 1.000 instâncias, a recuperação da instância poderá monopolizar os recursos disponíveis, o que pode degradar o desempenho do programa ou script e do computador que usa o programa ou script. Cada objeto ocupa os recursos necessários até que a memória seja liberada.
Para contornar essa condição, você pode chamar o método com o iFlags parâmetro definido com o wbemFlagForwardOnly e wbemFlagReturnImmediately sinalizadores para instruir o WMI a retornar um somente para encaminhamento SWbemObjectSet. Um SWbemObjectSet somente para encaminhamento elimina o problema de desempenho causado por um grande conjunto de dados, libertando a memória após a enumeração do objeto.
Qualquer método SWbemServices que não pode ser chamado no modo síncrono ou assíncrono é chamado no modo semissíncrono.
Os seguintes métodos são chamados no modo semissíncrono:
- SWbemServices.AssociatorsOf
- SWbemServices.Delete
- SWbemServices.ExecMethod
- SWbemServices.ExecNotificationQuery
- SWbemServices.ExecQuery
- SWbemServices.Get
- SWbemServices.InstancesOf
- SWbemServices.ReferencesTo
- SWbemServices.SubclassesOf
- SWbemServices.Put
Para obter mais informações sobre o modo semissíncrono, consulte Making a Semisynchronous Call with C++ e Making a Semisynchronous Call with VBScript.
Tópicos relacionados