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 |
标头 |
|
类型库 |
|
DLL |
|
CLSID |
CLSID_SWbemLocator |
IID |
IID_ISWbemLocator |