Compartir a través de


Conexión a WMI con VBScript

Los scripts WMI pueden condensar muchos de los pasos que se necesitan en un programa de C++. Pueden conectarse a WMI, no solo a través de un objeto SWbemLocator, sino también a través del moniker "winmgmts:". Un moniker es un nombre corto que coloca un espacio de nombres, clase o instancia en WMI. El nombre "winmgmts:" es el moniker de WMI que indica a Windows Script Hosts que use los objetos WMI, se conecta al espacio de nombres predeterminado y obtiene un objeto SWbemServices. Otra información de conexión, como un nivel de suplantación o una clase o instancia específica, aparece en la cadena después del nombre del moniker. Puede usar monikers en llamadas que creen u obtengan objetos WMI. Para más información, consulte Construcción de una cadena de moniker.

En el procedimiento siguiente, se describe cómo conectarse a WMI mediante SWbemLocator.

Para conectarse a WMI con SWbemLocator

  1. Recupere un objeto de localizador con una llamada a CreateObject.

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. Inicie sesión en el espacio de nombres mediante una llamada al método ConnectServer.

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    

    Si no especifica un equipo en la llamada a ConnectServer, WMI se conecta al equipo local. Si no especifica un espacio de nombres, WMI se conecta al espacio de nombres especificado en la clave del Registro.

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Espacio de nombres predeterminado

    El espacio de nombres predeterminado es \root\cimv2. Para más información sobre cómo los espacios de nombres, consulte Creación de jerarquías en WMI.

  3. Establezca el nivel de suplantación con una llamada al método SWbemServices.Security_.

    objService.Security_.ImpersonationLevel = 3 
    

    Para más información, consulte Establecimiento del nivel de seguridad de proceso predeterminado mediante VBScript.

  4. Implemente el propósito del script.

    WMI expone una variedad de objetos de scripting que se usan para acceder y manipular datos a través de la red. Para más información, consulte Manipulación de la información de clases e instancias y API de scripting para 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
    

En el procedimiento siguiente, se describe cómo conectarse a WMI y recuperar un objeto mediante un moniker.

Para conectarse a WMI y recuperar un objeto mediante un moniker

  1. Llame a GetObject con un moniker en el 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")
    

    El moniker contiene una serie de elementos que puede usar para conectarse a WMI:

    • "winmgmts:" indica a WSH que use objetos de la API de scripting. En este ejemplo concreto, WSH sabrá que debe devolver un objeto SWbemObject que describa el primer Win32_scheduledJob en el sistema. Otros objetos que se podrían devolver son un objeto SWbemCollection o un objeto SWbemServices, dependiendo del moniker descrito.

    • También, si lo desea, puede establecer los niveles de seguridad de la conexión. Sin embargo, tenga en cuenta que no puede establecer la información de nombre y contraseña en un moniker. Para más información, consulte Protección de clientes de scripting.

    • Opcionalmente, puede definir la ruta de acceso al objeto WMI. Esto incluye el equipo local o remoto, el espacio de nombres, así como el nombre de la clase. Para más información sobre el objeto GetObject de VBScript en scripts de WMI, consulte Creación de una instancia y Recuperación una instancia.

  2. En lugar de recuperar un solo elemento o colección, también puede elegir recuperar el objeto SWbemServices (tal como se describe en el ejemplo anterior). Después, puede llamar a consultas adicionales en el objeto devuelto.

    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
    

    En el ejemplo anterior, impersonate, o bien impersonationLevel=3, es el nivel de seguridad de proceso predeterminado. En el ejemplo siguiente, no es necesario especificar este nivel de seguridad de proceso a menos que tenga que cambiar la seguridad del proceso para delegar. Para más información, consulte Establecimiento del nivel de seguridad de proceso predeterminado mediante VBScript.

Scripting en WMI