Метод 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 |
Заголовок |
|
Библиотека типов |
|
DLL |
|
CLSID |
CLSID_SWbemLocator |
IID |
IID_ISWbemLocator |