Метод SWbemLocator.ConnectServer

Метод ConnectServer объекта SWbemLocator подключается к пространству имен на компьютере, указанному в параметре strServer . Целевой компьютер может быть локальным или удаленным, но на нем должен быть установлен инструментарий WMI. Примеры и сравнение с типом моникера подключения см. в разделе Создание скрипта WMI.

Начиная с Windows Vista , SWbemLocator.ConnectServer может подключаться к компьютерам с IPv6, используя IPv6-адрес в параметре strServer . Дополнительные сведения см. в разделе Поддержка IPv6 и IPv4 в WMI.

Описание этого синтаксиса см. в разделе Соглашения о документах для API скриптов.

Синтаксис

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

Параметры

strServer [in, необязательный]

Имя компьютера, к которому выполняется подключение. Если удаленный компьютер находится в домене, отличном от учетной записи пользователя, с которой выполняется вход, используйте полное имя компьютера. Если этот параметр не указан, вызов по умолчанию будет выполняться на локальном компьютере.

Пример: server1.network.fabrikam

В этом параметре также можно использовать IP-адрес. Если IP-адрес имеет формат IPv6, целевой компьютер должен работать под управлением IPv6. Адрес в IPv4 выглядит следующим образом: 123.123.123.123

IP-адрес в формате IPv6 выглядит следующим образом: 2010:836B:4179::836B:4179

Дополнительные сведения о DNS и IPv4 см. в разделе Примечания.

strNamespace [in, необязательный]

Строка, указывающая пространство имен, в которое выполняется вход. Например, чтобы войти в пространство имен root\default, используйте root\default. Если этот параметр не указан, по умолчанию используется пространство имен, настроенное в качестве пространства имен по умолчанию для создания скриптов. Дополнительные сведения см. в разделе Создание приложения или скрипта WMI.

Пример: "root\CIMV2"

strUser [in, необязательный]

Имя пользователя, используемое для подключения. Строка может быть в виде имени пользователя или домена\имя_пользователя. Оставьте этот параметр пустым, чтобы использовать текущий контекст безопасности. Параметр strUser следует использовать только с подключениями к удаленным серверам WMI. При попытке указать strUser для локального WMI-подключения попытка подключения завершится ошибкой. Если используется проверка подлинности Kerberos, имя пользователя и пароль, указанные в strUser и strPassword , не могут быть перехвачены в сети. Для указания strUser можно использовать формат имени участника-пользователя.

Пример: "DomainName\UserName"

Примечание

Если домен указан в strAuthority, он не должен указываться здесь. Указание домена в обоих параметрах приводит к ошибке Недопустимый параметр.

strPassword [in, необязательный]

Строка, указывающая пароль, используемый при попытке подключения. Оставьте параметр пустым, чтобы использовать текущий контекст безопасности. Параметр strPassword следует использовать только с подключениями к удаленным серверам WMI. При попытке указать strPassword для локального WMI-подключения попытка подключения завершится ошибкой. Если используется проверка подлинности Kerberos, имя пользователя и пароль, указанные в strUser и strPassword, не могут быть перехвачены в сети.

strLocale [in, необязательный]

Строка, указывающая код локализации. Если вы хотите использовать текущий языковой стандарт, оставьте его пустым. Если значение не является пустым, этот параметр должен быть строкой, указывающей требуемый языковой стандарт, в котором должны быть получены сведения. Для идентификаторов языкового стандарта Майкрософт формат строки — "MS_xxxx", где xxxx — это строка в шестнадцатеричной форме, указывающая код языка. Например, американский английский будет отображаться как "MS_409".

strAuthority [in, необязательный]

""

Этот параметр является необязательным. Однако если он указан, можно использовать только Kerberos или NTLMDomain.

Kerberos:

Если параметр strAuthority начинается со строки "Kerberos:", используется проверка подлинности Kerberos, и этот параметр должен содержать имя участника Kerberos. Имя участника Kerberos указывается как Kerberos:домен, например Kerberos:fabrikam , где fabrikam — это сервер, к которому вы пытаетесь подключиться.

Пример: "Kerberos:DOMAIN"

NTLMDomain:

Чтобы использовать проверку подлинности NT Lan Manager (NTLM), необходимо указать ее как NTLMDomain:domain, например NTLMDomain:fabrikam , где fabrikam — это имя домена.

Пример: "NTLMDomain:DOMAIN"

Если оставить этот параметр пустым, операционная система согласовывает с COM, чтобы определить, используется ли проверка подлинности NTLM или Kerberos. Этот параметр следует использовать только с подключениями к удаленным серверам WMI. При попытке задать центр для локального WMI-подключения попытка подключения завершится ошибкой.

Примечание

Если домен указан в strUser, который является предпочтительным расположением, он не должен указываться здесь. Указание домена в обоих параметрах приводит к ошибке Недопустимый параметр.

iSecurityFlags [в, необязательно]

Используется для передачи значений флагов в ConnectServer.

0 (0x0)

Значение 0 для этого параметра приводит к тому, что вызов ConnectServer возвращается только после установки подключения к серверу. Это может привести к тому, что программа перестанет отвечать на запросы на неопределенный срок, если установить подключение невозможно.

wbemConnectFlagUseMaxWait (128 (0x80))

Вызов ConnectServer гарантированно вернется через 2 минуты или меньше. Используйте этот флаг, чтобы программа не прекращала отвечать на неопределенный срок, если установить подключение не удается.

objwbemNamedValueSet [in, необязательный]

Как правило, это не определено. В противном случае это объект SWbemNamedValueSet , элементы которого представляют сведения контекста, которые могут использоваться поставщиком, обслуживающим запрос. Поставщик, который поддерживает или требует такие сведения, должен документировать имена распознаваемых значений, тип данных значения, допустимые значения и семантику.

Возвращаемое значение

В случае успешного выполнения WMI возвращает объект SWbemServices , привязанный к пространству имен, указанному в strNamespace на компьютере, указанном в strServer.

Коды ошибок

После завершения метода ConnectServer объект Err может содержать один из кодов ошибок из следующего списка.

wbemErrAccessDenied — 2147749891 (0x80041003)

Текущее или указанное имя пользователя и пароль не были действительными или не были авторизованы для подключения.

wbemErrFailed — 2147749889 (0x80041001)

Незаданная ошибка.

wbemErrInvalidNamespace — 2147749902 (0x8004100E)

Указанное пространство имен не существует на сервере.

wbemErrInvalidParameter — 2147749896 (0x80041008)

Указан недопустимый параметр или не удалось проанализировать пространство имен.

wbemErrOutOfMemory — 2147749894 (0x80041006)

Недостаточно памяти для завершения операции.

wbemErrTransportFailure — 2147749909

Произошла ошибка сети, препятствующая нормальной работе.

Комментарии

Метод ConnectServer часто используется при подключении к учетной записи с другими учетными данными пользователя и пароля на удаленном компьютере, так как в строке моникера нельзя указать другой пароль. Дополнительные сведения см. в разделе Подключение к WMI на удаленном компьютере.

Использование IPv4-адреса для подключения к удаленному серверу может привести к непредвиденному поведению. Вероятная причина — устаревшие записи DNS в вашей среде. В таких случаях будет использоваться устаревшая запись PTR для машины с непредсказуемыми результатами. Чтобы избежать такого поведения, можно добавить точку (".") к IP-адресу перед вызовом ConnectServer. Это приводит к сбою обратного поиска 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