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

  1. Recupere um objeto localizador com uma chamada para CreateObject.

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. 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.

  3. 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.

  4. 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

  1. 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.

  2. 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.

Scripts no WMI