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, 可选]

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

示例: server1.network.fabrikam

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

IPv6 格式的 IP 地址如下所示 2010:836B:4179::836B:4179

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

strNamespace [in, 可选]

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

示例:“root\CIMV2”

strUser [in, 可选]

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

示例:“DomainName\UserName”

注意

如果在 strAuthority 中指定了域,则不能在此处指定域。 在两个参数中指定域会导致参数错误无效。

strPassword [in, 可选]

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

strLocale [in, 可选]

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

strAuthority [in, 可选]

""

此参数是可选的。 但是,如果指定,只能使用 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, 可选]

用于将标志值传递给 ConnectServer

0 (0x0)

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

wbemConnectFlagUseMaxWait (128 (0x80) )

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

objwbemNamedValueSet [in, 可选]

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

返回值

如果成功,WMI 将返回绑定到 strServer 中指定的 strNamespace 中指定的命名空间的 SWbemServices 对象。

错误代码

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 脚本