SWbemLocator.ConnectServer 方法

SWbemLocator 对象的 ConnectServer 方法连接到 strServer 参数中指定的计算机上的命名空间。 目标计算机可以是本地计算机,也可以是远程计算机,但它必须安装有 WMI。 有关示例和与连接的名字对象类型的比较,请参阅创建 WMI 脚本

从 Windows Vista 开始,SWbemLocator.ConnectServer 可以使用 strServer 参数中的 IPv6 地址与运行 IPv6 的计算机建立连接。 有关详细信息,请参阅 WMI 中的 IPv6 和 IPv4 支持

有关此语法的说明,请参阅脚本 API 的文档约定

语法

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

parameters

strServer [in, optional]

要连接到的计算机名称。 如果远程计算机与登录所使用的用户帐户位于不同的域中,请使用完全限定的计算机名。 如果未提供此参数,则默认调用本地计算机。

示例: server1.network.fabrikam

还可以使用此参数中的 IP 地址。 如果 IP 地址采用 IPv6 格式,则目标计算机必须运行 IPv6。 IPv4 中的地址类似于 123.123.123.123

采用 IPv6 格式的 IP 地址类似于 2010:836B:4179::836B:4179

有关 DNS 和 IPv4 的详细信息,请参阅“备注”部分。

strNamespace [in, optional]

指定要登录到的命名空间的字符串。 例如,若要登录到 root\default 命名空间,请使用 root\default。 如果未指定此参数,则默认为配置为用于脚本编写的默认命名空间的命名空间。 有关详细信息,请参阅创建 WMI 应用程序或脚本

示例:“root\CIMV2”

strUser [in, optional]

用于连接的用户名。 字符串的格式可以是用户名或域\用户名。 将此参数留空以使用当前安全性上下文。 strUser 参数应仅用于与远程 WMI 服务器的连接。 如果尝试为本地 WMI 连接指定 strUser,则连接尝试会失败。 如果使用 Kerberos 身份验证,则无法在网络上截获 strUser 和 strPassword 中指定的用户名和密码。 可以使用 UPN 格式指定 strUser。

示例:“DomainName\UserName”

注意

如果在 strAuthority 中指定了域,则不得在此处指定该域。 在两个参数中同时指定该域会导致出现“参数无效”错误。

strPassword [in, optional]

指定尝试连接时要使用的密码的字符串。 将该参数留空以使用当前安全性上下文。 strPassword 参数应仅用于与远程 WMI 服务器的连接。 如果尝试为本地 WMI 连接指定 strPassword,则连接尝试会失败。 如果使用 Kerberos 身份验证,则无法在网络上截获 strUser 和 strPassword 中指定的用户名和密码。

strLocale [in, optional]

指定本地化代码的字符串。 如果要使用当前区域设置,请将其留空。 如果不为空,此参数必须是一个字符串,指示必须在其中检索信息的所需区域设置。 对于 Microsoft 区域设置标识符,字符串的格式为“MS_xxx”,其中 xxx 是一个十六进制的字符串,表示 LCID。 例如,英语(美国)将显示为“MS_409”。

strAuthority [in, optional]

""

此参数是可选的。 但是,如果已指定,则只能使用 Kerberos 或 NTLMDomain。

Kerberos:

如果 strAuthority 参数以字符串“Kerberos:”开头,则使用 Kerberos 身份验证,并且此参数应包含 Kerberos 主体名称。 Kerberos 主体名称被指定为 Kerberos:domain,例如 Kerberos:fabrikam,其中 fabrikam 是尝试连接到的服务器。

示例:“Kerberos:DOMAIN”

NTLMDomain:

若要使用 NT Lan Manager (NTLM) 身份验证,必须将其指定为 NTLMDomain:domain,例如 NTLMDomain:fabrikam,其中 fabrikam 是域的名称。

示例:“NTLMDomain:DOMAIN”

如果将此参数留空,操作系统会与 COM 协商,以确定是使用 NTLM 还是 Kerberos 身份验证。 此参数应仅用于与远程 WMI 服务器的连接。 如果尝试为本地 WMI 连接设置授权,则连接尝试会失败。

注意

如果在 strUser(首选位置)中指定了域,则不得在此处指定该域。 在两个参数中同时指定该域会导致出现“参数无效”错误。

iSecurityFlags [in, optional]

用于将标志值传递给 ConnectServer。

0 (0x0)

此参数的值为 0 会导致仅在与服务器建立连接后才返回对 ConnectServer 的调用。 如果无法建立连接,这可能会导致程序无限期停止响应。

wbemConnectFlagUseMaxWait (128 (0x80))

ConnectServer 调用保证在 2 分钟或更短的时间内返回。 使用此标志可防止程序在无法建立连接时无限期停止响应。

objwbemNamedValueSet [in, optional]

通常,此参数未定义。 如果已定义,此参数是一个 SWbemNamedValueSet 对象,其元素表示可供提供请求服务的提供程序使用的上下文信息。 支持或需要此类信息的提供程序必须记录已识别的值名称、值数据类型、允许的值和语义。

返回值

如果成功,WMI 会返回一个 SWbemServices 对象,该对象绑定到 strServer 中指定的计算机上的 strNamespace 中指定的命名空间。

错误代码

ConnectServer 方法完成后,Err 对象可能包含以下列表中的错误代码之一。

wbemErrAccessDenied - 2147749891 (0x80041003)

当前或指定的用户名和密码无效或无权建立连接。

wbemErrFailed - 2147749889 (0x80041001)

错误。

wbemErrInvalidNamespace - 2147749902 (0x8004100E)

服务器上不存在指定的命名空间。

wbemErrInvalidParameter - 2147749896 (0x80041008)

指定了无效参数,或者无法解析命名空间。

wbemErrOutOfMemory - 2147749894 (0x80041006)

内存不足,无法完成此操作。

wbemErrTransportFailure - 2147749909

出现网络错误,无法正常操作。

备注

连接到远程计算机上具有不同用户名和密码凭据的帐户时,通常使用 ConnectServer 方法,因为无法在名字对象字符串中指定不同的密码。 有关详细信息,请参阅连接到远程计算机上的 WMI

使用 IPv4 地址连接到远程服务器可能会导致意外行为。 可能的原因是环境中的 DNS 条目已过时。 在这些情况下,将使用计算机的过时 PTR 条目,会产生不可预测的结果。 若要避免此行为,可以在调用 ConnectServer 之前向 IP 地址追加句点(“.”)。 这会导致反向 DNS 查找失败,但可能会使 ConnectServer 调用在正确的计算机上成功。

示例

以下 VBScript 代码示例介绍如何连接到远程计算机以获取 Win32_IP4RouteTable 数据。 strDomain 中指定的域名在 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

以下 PowerShell 代码片段访问远程服务器并列出可用的 WMI 类。

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

要求

要求
最低受支持的客户端
Windows Vista
最低受支持的服务器
Windows Server 2008
标头
Wbemdisp.h
类型库
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemLocator
IID
IID_ISWbemLocator

另请参阅

SWbemLocator

SWbemServices

连接到远程计算机上的 WMI

创建 WMI 脚本