Método SWbemLocator.ConnectServer
O método ConnectServer do objeto SWbemLocator conecta-se ao namespace no computador especificado no parâmetro strServer . O computador de destino pode ser local ou remoto, mas deve ter o WMI instalado. Para obter exemplos e uma comparação com o tipo de conexão do moniker, consulte Criando um script WMI.
A partir do Windows Vista, o SWbemLocator.ConnectServer pode se conectar com computadores que executam o IPv6 usando um endereço IPv6 no parâmetro strServer. Para obter mais informações, consulte o suporte IPv6 e IPv4 no WMI.
Para obter uma explicação dessa sintaxe, consulte As Convenções de Documento para a API de Scripts.
Sintaxe
objwbemServices = .ConnectServer( _
[ ByVal strServer ], _
[ ByVal strNamespace ], _
[ ByVal strUser ], _
[ ByVal strPassword ], _
[ ByVal strLocale ], _
[ ByVal strAuthority ], _
[ ByVal iSecurityFlags ], _
[ ByVal objwbemNamedValueSet ] _
)
Parâmetros
-
strServer [in, opcional]
-
Nome do computador ao qual você está se conectando. Se o computador remoto estiver em um domínio diferente da conta de usuário na qual você faz logon, use o nome do computador totalmente qualificado. Se você não fornecer esse parâmetro, a chamada será padrão para o computador local.
Exemplo:
server1.network.fabrikamVocê também pode usar um endereço IP nesse parâmetro. Se o endereço IP estiver no formato IPv6, o computador de destino deverá estar executando o IPv6. Um endereço no IPv4 se parece com
123.123.123.123Um endereço IP no formato IPv6 se parece com
2010:836B:4179::836B:4179Para obter mais informações sobre DNS e IPv4, consulte a seção Comentários.
-
strNamespace [in, opcional]
-
Cadeia de caracteres que especifica o namespace no qual você faz logon. Por exemplo, para fazer logon no namespace raiz\padrão, use raiz\padrão. Se você não especificar esse parâmetro, ele será o padrão para o namespace configurado como o namespace padrão para scripts. Para obter mais informações, consulte Criando um aplicativo ou script WMI.
Exemplo: "root\CIMV2"
-
strUser [in, opcional]
-
Nome de usuário a ser usado para se conectar. A cadeia de caracteres pode estar na forma de um nome de usuário ou um Domínio\Nome de Usuário. Deixe esse parâmetro em branco para usar o contexto de segurança atual. O parâmetro strUser só deve ser usado com conexões com servidores WMI remotos. Se você tentar especificar o strUser para uma conexão WMI local, a tentativa de conexão falhará. Se a autenticação Kerberos estiver em uso, o nome de usuário e a senha especificados no strUser e strPassword não poderão ser interceptados em uma rede. Você pode usar o formato UPN para especificar o strUser.
Exemplo: "DomainName\UserName"
Observação
Se um domínio for especificado em strAuthority, o domínio não deverá ser especificado aqui. Especificar o domínio em ambos os parâmetros resulta em um erro de parâmetro inválido.
-
strPassword [in, opcional]
-
Cadeia de caracteres que especifica a senha a ser usada ao tentar se conectar. Deixe o parâmetro em branco para usar o contexto de segurança atual. O parâmetro strPassword só deve ser usado com conexões com servidores WMI remotos. Se você tentar especificar strPassword para uma conexão WMI local, a tentativa de conexão falhará. Se a autenticação Kerberos estiver em uso, o nome de usuário e a senha especificados no strUser e strPassword não poderão ser interceptados na rede.
-
strLocale [in, opcional]
-
Cadeia de caracteres que especifica o código de localização. Se você quiser usar a localidade atual, deixe-a em branco. Se não estiver em branco, esse parâmetro deve ser uma cadeia de caracteres que indica a localidade desejada em que as informações devem ser recuperadas. Para identificadores de localidade da Microsoft, o formato da cadeia de caracteres é "MS_xxxx", em que xxxx é uma cadeia de caracteres no formulário hexadecimal que indica o LCID. Por exemplo, o inglês americano apareceria como "MS_409".
-
strAuthority [in, opcional]
-
""
-
Esse parâmetro é opcional. No entanto, se for especificado, somente Kerberos ou NTLMDomain poderão ser usados.
-
Kerberos:
-
Se o parâmetro strAuthority começar com a cadeia de caracteres "Kerberos:", a autenticação Kerberos será usada e esse parâmetro deverá conter um nome de entidade de segurança Kerberos. O nome da entidade de segurança Kerberos é especificado como Kerberos:domain, como
Kerberos:fabrikamondefabrikamestá o servidor ao qual você está tentando se conectar.Exemplo: "Kerberos:DOMAIN"
-
NTLMDomain:
-
Para usar a autenticação NTLM (NTLM), especifique-a como NTLMDomain:domain, como
NTLMDomain:fabrikamondefabrikamestá o nome do domínio.Exemplo: "NTLMDomain:DOMAIN"
Se você deixar esse parâmetro em branco, o sistema operacional negociará com COM para determinar se a autenticação NTLM ou Kerberos é usada. Esse parâmetro só deve ser usado com conexões com servidores WMI remotos. Se você tentar definir a autoridade para uma conexão WMI local, a tentativa de conexão falhará.
Observação
Se o domínio for especificado no strUser, que é o local preferencial, ele não deverá ser especificado aqui. Especificar o domínio em ambos os parâmetros resulta em um erro de parâmetro inválido.
iSecurityFlags [in, opcional]
Usado para passar valores de sinalizador para ConnectServer.
0 (0x0)
Um valor 0 para esse parâmetro faz com que a chamada para ConnectServer retorne somente depois que a conexão com o servidor for estabelecida. Isso pode fazer com que o programa pare de responder indefinidamente se a conexão não puder ser estabelecida.
wbemConnectFlagUseMaxWait (128 (0x80))
A chamada connectServer tem a garantia de retornar em 2 minutos ou menos. Use esse sinalizador para impedir que seu programa cesse de responder indefinidamente se a conexão não puder ser estabelecida.
objwbemNamedValueSet [in, opcional]
Normalmente, isso é indefinido. Caso contrário, esse é um objeto SWbemNamedValueSet cujos elementos representam as informações de contexto que podem ser usadas pelo provedor que está atendendo à solicitação. Um provedor que dê suporte ou exija essas informações deve documentar os nomes de valor reconhecidos, o tipo de dados do valor, os valores permitidos e a semântica.
Retornar valor
Se tiver êxito, o WMI retornará um objeto SWbemServices que está associado ao namespace especificado no strNamespace no computador especificado no strServer.
Códigos do Erro
Após a conclusão do método ConnectServer , o objeto Err pode conter um dos códigos de erro na lista a seguir.
-
wbemErrAccessDenied - 2147749891 (0x80041003)
-
O nome de usuário e a senha atuais ou especificados não eram válidos ou autorizados a fazer a conexão.
-
wbemErrFailed - 2147749889 (0x80041001)
-
Erro não especificado.
-
wbemErrInvalidNamespace - 2147749902 (0x8004100E)
-
O namespace especificado não existia no servidor.
-
wbemErrInvalidParameter - 2147749896 (0x80041008)
-
Um parâmetro inválido foi especificado ou o namespace não pôde ser analisado.
-
wbemErrOutOfMemory - 2147749894 (0x80041006)
-
Memória insuficiente para concluir a operação.
-
wbemErrTransportFailure - 2147749909
-
Ocorreu um erro de rede, impedindo a operação normal.
Comentários
O método ConnectServer geralmente é usado ao se conectar a uma conta com um nome de usuário e credenciais de senha diferentes em um computador remoto porque você não pode especificar uma senha diferente em uma cadeia de caracteres de moniker . Para obter mais informações, consulte Conectar-se ao WMI em um computador remoto.
Usar um endereço IPv4 para se conectar a um servidor remoto pode resultar em um comportamento inesperado. A causa provável são entradas DNS obsoletas em seu ambiente. Nessas circunstâncias, a entrada de PTR obsoleta para o computador será usada, com resultados imprevisíveis. Para evitar esse comportamento, você pode acrescentar um período (".") ao endereço IP antes de chamar o ConnectServer. Isso faz com que a pesquisa DNS reversa falhe, mas pode permitir que a chamada do ConnectServer tenha êxito no computador correto.
Exemplos
O exemplo de código VBScript a seguir descreve como se conectar a um computador remoto para obter dados Win32_IP4RouteTable . O nome de domínio especificado no strDomain é usado em 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
O snippet do PowerShell a seguir acessa um servidor remoto e lista as classes WMI disponíveis.
$NameSpace = 'root\ccm'
$ComputerName = 'sccm.company.com'
$WbemLocator = New-Object -ComObject "WbemScripting.SWbemLocator"
$WbemServices = $WbemLocator.ConnectServer($ComputerName, $Namespace)
$WbemClasses = $WbemServices.SubclassesOf()
$WbemClasses
Requisitos
| Requisito | Valor |
|---|---|
| Cliente mínimo com suporte |
Windows Vista |
| Servidor mínimo com suporte |
Windows Server 2008 |
| Cabeçalho |
|
| Biblioteca de tipos |
|
| DLL |
|
| CLSID |
CLSID_SWbemLocator |
| IID |
IID_ISWbemLocator |