SWbemLocator.ConnectServer 方法

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

从 vista Windows开始 ,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,可选]

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

示例:"根 \ 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:,例如,其中 是尝试连接到 Kerberos:fabrikam fabrikam 的服务器。

示例:"Kerberos:DOMAIN"

NTLMDomain:

若要使用 NT Lan Manager (NTLM) 身份验证,必须将它指定为 NTLMDomain:域, 例如 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 将返回 一个 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 脚本