SWbemLocator.ConnectServer (método)

El método ConnectServer del objeto SWbemLocator se conecta al espacio de nombres del equipo especificado en el parámetro strServer. El equipo de destino puede ser local o remoto, pero debe tener instalado WMI. Para ver ejemplos y una comparación con el tipo de conexión de moniker, consulte Creación de un script de WMI.

A partir de Windows Vista, SWbemLocator.ConnectServer puede conectarse con equipos que ejecutan IPv6 mediante una dirección IPv6 en el parámetro strServer. Para más información, consulte Compatibilidad con IPv6 e IPv4 en WMI.

Para obtener una explicación de esta sintaxis, consulte Convenciones de documentación para la API de scripting.

Sintaxis

objwbemServices = .ConnectServer( _
  [ ByVal strServer ], _
  [ ByVal strNamespace ], _
  [ ByVal strUser ], _
  [ ByVal strPassword ], _
  [ ByVal strLocale ], _
  [ ByVal strAuthority ], _
  [ ByVal iSecurityFlags ], _
  [ ByVal objwbemNamedValueSet ] _
)

Parámetros

strServer [in, optional]

Nombre de equipo al que se conecta. Si el equipo remoto está en un dominio diferente al de la cuenta de usuario con la que inicia sesión, use el nombre completo del equipo. Si no proporciona este parámetro, la llamada se hace de forma predeterminada al equipo local.

Ejemplo: server1.network.fabrikam

También puede usar una dirección IP en este parámetro. Si la dirección IP está en formato IPv6, el equipo de destino debe ejecutar IPv6. Una dirección en formato IPv4 sería como 123.123.123.123.

Una dirección IP en formato IPv6 sería como 2010:836B:4179::836B:4179

Para más información sobre DNS e IPv4, consulte la sección Comentarios.

strNamespace [in, optional]

Cadena que especifica el espacio de nombres en el que inicia sesión. Por ejemplo, para iniciar sesión en el espacio de nombres root\default, use root\default. Si no especifica este parámetro, el valor predeterminado es el espacio de nombres configurado como espacio de nombres predeterminado para el scripting. Para obtener más información, consulte Crear una aplicación WMI o un script.

Ejemplo: "root\CIMV2"

strUser [in, opcional]

Nombre de usuario que se va a usar para conectarse. La cadena puede tener el formato de nombre de usuario o dominio\nombre de usuario. Deje este parámetro en blanco para usar el contexto de seguridad actual. El parámetro strUser solo se debe usar con conexiones a servidores WMI remotos. Si intenta especificar strUser para una conexión WMI local, se produce un error en el intento de conexión. Si la autenticación Kerberos está en uso, el nombre de usuario y la contraseña especificados en strUser y strPassword no se pueden interceptar en una red. Puede usar el formato UPN para especificar strUser.

Ejemplo: "DomainName\UserName"

Nota

Si se especifica un dominio en strAuthority, el dominio no debe especificarse aquí. Si se especifica el dominio en ambos parámetros, se produce un error de parámetro no válido.

strPassword [in, optional]

Cadena que especifica la contraseña que se va a usar al intentar conectarse. Deje el parámetro en blanco para usar el contexto de seguridad actual. El parámetro strPassword solo debe usarse con conexiones a servidores WMI remotos. Si intenta especificar strPassword para una conexión WMI local, se produce un error en el intento de conexión. Si la autenticación Kerberos está en uso, el nombre de usuario y la contraseña especificados en strUser y strPassword no se pueden interceptar en la red.

strLocale [in, optional]

Cadena que especifica el código de localización. Si quiere usar la configuración regional actual, déjelo en blanco. Si no está en blanco, este parámetro debe ser una cadena que indique la configuración regional deseada donde se debe recuperar la información. En los identificadores de configuración regional de Microsoft, el formato de la cadena es "MS_xxx", donde xxx es una cadena en formato hexadecimal que indica el LCID. Por ejemplo, el idioma inglés americano aparecería como "MS_409".

strAuthority [in, optional]

""

Este parámetro es opcional. Sin embargo, si se especifica, solo se puede usar Kerberos o NTLMDomain.

Kerberos:

Si el parámetro strAuthority comienza con la cadena "Kerberos:", se usa la autenticación Kerberos y este parámetro debe contener un nombre de entidad de seguridad de Kerberos. El nombre de la entidad de seguridad de Kerberos se especifica como Kerberos:domain, por ejemplo, Kerberos:fabrikam donde fabrikam es el servidor al que intenta conectarse.

Ejemplo: "Kerberos:DOMAIN"

NTLMDomain:

Para usar la autenticación NT Lan Manager (NTLM), debe especificarla como NTLMDomain:domain, por ejemplo, NTLMDomain:fabrikam donde fabrikam es el nombre del dominio.

Ejemplo: "NTLMDomain:DOMAIN"

Si deja este parámetro en blanco, el sistema operativo negocia con COM para determinar si se usa la autenticación NTLM o Kerberos. Este parámetro solo se debe usar con conexiones a servidores WMI remotos. Si intenta establecer la autoridad de una conexión WMI local, se produce un error en el intento de conexión.

Nota

Si el dominio se especifica en strUser, que es la ubicación preferida, no debe especificarse aquí. Si se especifica el dominio en ambos parámetros, se produce un error de parámetro no válido.

iSecurityFlags [in, optional]

Se usa para pasar valores de marca a ConnectServer.

0 (0x0)

Un valor de 0 para este parámetro hace que la llamada a ConnectServer devuelva resultados solo después de establecer la conexión al servidor. Esto podría hacer que el programa dejara de responder indefinidamente si no se puede establecer la conexión.

wbemConnectFlagUseMaxWait (128 (0x80))

Se garantiza que la llamada a ConnectServer devuelva resultados en 2 minutos o menos. Use esta marca para evitar que el programa deje de responder indefinidamente si no se puede establecer la conexión.

objwbemNamedValueSet [entrada, opcional]

Normalmente, esto no está definido. De lo contrario, se trata de un objeto SWbemNamedValueSet cuyos elementos representan la información de contexto que puede usar el proveedor que atiende la solicitud. Un proveedor que admita o necesite esa información debe documentar los nombres de valor reconocidos, el tipo de datos del valor, los valores permitidos y la semántica.

Valor devuelto

Si se ejecuta correctamente, WMI devuelve un objeto SWbemServices enlazado al espacio de nombres especificado en strNamespace en el equipo especificado en strServer.

Códigos de error

Después de completar el método ConnectServer, el objeto Err puede contener uno de los códigos de error de la lista siguiente.

wbemErrAccessDenied - 2147749891 (0x80041003)

El nombre de usuario y la contraseña actuales o especificados no eran válidos o no estaban autorizados para establecer la conexión.

wbemErrFailed - 2147749889 (0x80041001)

Error no especificado.

wbemErrInvalidNamespace: 2147749902 (0x8004100E)

El espacio de nombres especificado no existía en el servidor.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Se ha especificado un parámetro no válido o no se ha podido analizar el espacio de nombres.

wbemErrOutOfMemory - 2147749894 (0x80041006)

No hay suficiente memoria para completar la operación.

wbemErrTransportFailure: 2147749909

Se produjo un error de red, lo que impide el funcionamiento normal.

Comentarios

El método ConnectServer se usa a menudo al conectarse a una cuenta con credenciales diferentes de nombre de usuario y contraseña en un equipo remoto, ya que no se puede especificar otra contraseña en una cadena de moniker. Para obtener más información, consulte Conexión a WMI en un equipo remoto (puede estar en inglés).

El uso de una dirección IPv4 para conectarse a un servidor remoto puede dar lugar a comportamientos inesperados. La causa probable son las entradas DNS obsoletas en el entorno. En estas circunstancias, se usará la entrada PTR obsoleta para la máquina, con resultados imprevisibles. Para evitar este comportamiento, puede anexar un punto (".") a la dirección IP antes de llamar a ConnectServer. Esto hace que se produzca un error en la búsqueda inversa de DNS, pero puede permitir que la llamada ConnectServer se realice favorablemente en la máquina correcta.

Ejemplos

En el siguiente ejemplo de código de VBScript se describe cómo conectarse a un equipo remoto para obtener datos de Win32_IP4RouteTable. El nombre de dominio especificado en strDomain se usa en strAuthority.

Const intMin = 3600
strComputer = "RemoteComputer" 
strDomain = "DomainName"  
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
Wscript.Echo

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _ 
                                                  "root\CIMV2", _ 
                                                  strUser, _ 
                                                  strPassword, _ 
                                                  "MS_409", _ 
                                                  "NTLMDomain:" + strDomain) 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_IP4RouteTable",,48) 
For Each objItem in colItems
    WScript.Echo "Age in Minutes: " & int(objItem.Age/intMin) & VBNewLine _
               & "Description:    " & objItem.Description & VBNewLine _
               & "Destination:    " & objItem.Destination & VBNewLine _
               & "InterfaceIndex: " & objItem.InterfaceIndex & VBNewLine _
               & "Mask:           " & objItem.Mask & VBNewLine _
               & "Metric1:        " & objItem.Metric1 & VBNewLine _
               & "Metric2:        " & objItem.Metric2 & VBNewLine _
               & "Metric3:        " & objItem.Metric3 & VBNewLine _
               & "Metric4:        " & objItem.Metric4 & VBNewLine _
               & "Metric5:        " & objItem.Metric5 & VBNewLine _
               & "Name:           " & objItem.Name & VBNewLine _
               & "NextHop:        " & objItem.NextHop & VBNewLine _
               & "Protocol:       " & objItem.Protocol & VBNewLine _
               & "Type: " & objItem.Type
    WScript.Echo
   </example>
Next

El siguiente fragmento de código de PowerShell tiene acceso a un servidor remoto y enumera las clases de WMI disponibles.

$NameSpace = 'root\ccm'
$ComputerName = 'sccm.company.com'
$WbemLocator = New-Object -ComObject "WbemScripting.SWbemLocator"
$WbemServices = $WbemLocator.ConnectServer($ComputerName, $Namespace)
$WbemClasses = $WbemServices.SubclassesOf()
$WbemClasses

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Encabezado
Wbemdisp.h
Biblioteca de tipos
Wbemdisp.tlb
Archivo DLL
Wbemdisp.dll
CLSID
CLSID_SWbemLocator
IID
IID_ISWbemLocator

Consulte también

SWbemLocator

SWbemServices

Conexión a WMI en un equipo remoto

Creación de un script de WMI