Conectando-se ao WMI com o VBScript
Os scripts do WMI podem reduzir muitas das etapas necessárias em um programa C++. Eles podem se conectar ao WMI, não apenas por meio de um objeto SWbemLocator, mas também por meio do moniker "winmgmts:". Um moniker é um nome curto que localiza um namespace, uma classe ou uma instância no WMI. O nome "winmgmts:" é o moniker do WMI que informa ao Windows Script Host para usar os objetos WMI, conectar-se ao namespace padrão e obter um objeto SWbemServices. Outras informações de conexão, como o nível de representação ou uma classe ou instância específica, aparecem na cadeia de caracteres seguindo o nome do moniker. Você pode usar monikers em chamadas que criam ou obtêm objetos WMI. Para obter mais informações, consulte Construir uma cadeia de caracteres de moniker.
O procedimento a seguir descreve como se conectar ao WMI usando SWbemLocator.
Para se conectar ao WMI usando SWbemLocator
Recupere um objeto localizador com uma chamada para CreateObject.
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Faça logon no namespace usando uma chamada para o método ConnectServer.
Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer(".", "root\cimv2")
Se você não especificar um computador na chamada para ConnectServer, o WMI se conectará ao computador local. Se você não especificar um namespace, o WMI se conectará ao namespace especificado na chave do Registro.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Namespace
O namespace padrão é \root\cimv2. Para obter mais informações sobre namespaces, consulte Criar hierarquias dentro do WMI.
Defina o nível de representação com uma chamada para o método SWbemServices.Security_.
objService.Security_.ImpersonationLevel = 3
Para obter mais informações, consulte Definir o nível de segurança do processo padrão usando VBScript.
Implemente a finalidade do script.
O WMI expõe uma variedade de objetos de script que são usados para acessar e manipular dados em toda a sua rede. Para obter mais informações, consulte Manipulação de informações de classe e instância e API de script para o WMI.
Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer(".", "root\cimv2") objService.Security_.ImpersonationLevel = 3 Set Jobs = objService.ExecQuery("SELECT * FROM Win32_ScheduledJob") i=0 For each Job in Jobs i = i+1 WScript.Echo Job.JobId & " " & Job.Command & VBNewLine Next If i = 0 Then WScript.Echo "No Jobs Scheduled with the AT command were found" End If
O procedimento a seguir descreve como se conectar ao WMI e recuperar um objeto usando um moniker.
Para se conectar ao WMI e recuperar um objeto usando um moniker
Chame GetObject com um moniker no parâmetro de entrada.
'the simple version Set MyObject = GetObject("winMgmts::Win32_scheduledJob") 'Or the more complex version strComputer = "." Set MyObject = GetObject("winMgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2:Win32_ScheduledJob")
O moniker contém vários elementos que você pode usar para se conectar ao WMI:
O "winmgmts:" informa ao WSH para usar objetos da API de script. Neste exemplo específico, o WSH saberá que deve retornar um SWbemObject que descreve o primeiro Win32_scheduledJob no sistema. Outros objetos possíveis a serem retornados seriam um SWbemCollection ou um objeto SWbemServices, dependendo do que o moniker descreveu.
Opcionalmente, você pode definir os níveis de segurança para a conexão. No entanto, não é possível definir informações de nome e senha em um moniker. Para obter mais informações, confira Proteger clientes de script.
Opcionalmente, você pode definir o caminho para o objeto WMI. Isso inclui tanto o computador local quanto remoto, o namespace, bem como o nome da classe. Para obter mais informações sobre como usar o GetObject do VBScript em scripts do WMI, consulte Criar uma instância e Recuperar uma instância do WMI.
Em vez de recuperar um único item ou uma única coleção, você também pode optar por recuperar o objeto SWbemServices (conforme descrito no exemplo anterior). Posteriormente, você pode chamar consultas adicionais no objeto retornado.
strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colScheduledJobs = objWMIService.ExecQuery("Select * from Win32_ScheduledJob") For Each objJob in colScheduledJobs Wscript.Echo "Job ID: " & objJob.JobId & "Command: " & objJob.Command & VBNewLine Next
No exemplo anterior, “impersonate” ou “impersonationLevel=3”, é o nível de segurança do processo padrão. No exemplo a seguir, não é necessário especificar esse nível de segurança do processo, a menos que você precise alterar a segurança do processo para delegate. Para obter mais informações, consulte Definir o nível de segurança do processo padrão usando VBScript.
Tópicos relacionados