Obtendo dados de um computador remoto

Você pode obter dados ou gerenciar recursos em computadores remotos, bem como no computador local. Conectar-se a um computador remoto em um script de Gerenciamento Remoto do Windows é muito semelhante a fazer uma conexão local. Os dados da instância WMI estão disponíveis e, se o computador remoto tiver hardware BMC que possa se comunicar usando o protocolo WS-Management, os dados da IPMI (Intelligent Platform Management Interface) também estão disponíveis. Para obter mais informações, consulte Gerenciamento Remoto do Windows e WMI e Gerenciamento remoto de hardware.

Talvez seja necessário criar um objeto ConnectionOptions para especificar informações sobre o tipo de autenticação solicitado para o logon.

Se a conta no computador remoto tiver o mesmo nome de usuário e senha de logon, as únicas informações extras necessárias serão o transporte, o nome de domínio e o nome do computador. Devido ao UAC (Controle de Conta de Usuário), a conta remota deve ser uma conta de domínio e um membro do grupo administradores de computador remoto. Se a conta for um membro de computador local do grupo Administradores, o UAC não permitirá o acesso ao serviço WinRM. Para acessar um serviço WinRM remoto em um grupo de trabalho, a filtragem de UAC para contas locais deve ser desabilitada criando a seguinte entrada do Registro DWORD e definindo seu valor como 1: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] LocalAccountTokenFilterPolicy.

Para se conectar a um computador remoto usando seu nome de usuário e senha de logon

  1. Especifique o computador de destino com um nome de domínio totalmente qualificado ou um endereço IP e atribua isso a uma constante. Se um endereço IPv6 for especificado, o endereço deverá ser colocado entre colchetes.

    Const RemoteComputer = "ComputerName.domain.com"
    
  2. Crie um objeto WSMan .

    Set objWsman = CreateObject("WSMan.Automation")
    
  3. Crie a sessão, especificando o transporte, HTTP ou HTTPS e concatenando-a com a constante que representa o computador de destino.

    
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    

O exemplo de código VBScript a seguir mostra o script completo. O script inclui uma sub-rotina para transformar os dados de XML bruto para forma legível por humanos. Para obter mais informações, consulte Exibindo a saída XML de scripts WinRM.

Const RemoteComputer = "ComputerName.domain.com"

Set objWsman = CreateObject("WSMan.Automation")
Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" & _
  "wmi/root/cimv2/Win32_OperatingSystem"
Set objResponse = objSession.Enumerate(strResource)

While Not objResponse.AtEndOfStream
    DisplayOutput(objResponse.ReadItem) 
Wend

'****************************************************
' Displays WinRM XML message using built-in XSL
'****************************************************
Sub DisplayOutput(strWinRMXml)
    Dim xmlFile, xslFile
    Set xmlFile = CreateObject("MSXml.DOMDocument") 
    Set xslFile = CreateObject("MSXml.DOMDocument")
    xmlFile.LoadXml(strWinRMXml)
    xslFile.Load("WsmTxt.xsl")
    Wscript.Echo xmlFile.TransformNode(xslFile) 
End Sub

Para se conectar a um computador remoto usando uma conta diferente

  1. Especifique o computador de destino com um nome de domínio totalmente qualificado ou um endereço IP e atribua isso a uma constante. Se um endereço IPv6 for especificado, o endereço deverá ser colocado entre colchetes.

    Const RemoteComputer = "ComputerName.domain.com"
    
  2. Crie um objeto WSMan .

    Set objWsman = CreateObject("Wsman.Automation")
    
    
  3. Chame o método WSMan.CreateConnectionOptions para criar um objeto ConnectionOptions . A conta no computador remoto deve ser membro do grupo de administradores de computador local.

    Set objConnectionOptions = objWsman.CreateConnectionOptions
    objConnectionOptions.UserName = "Username"
    objConnectionOptions.Password = "Password"
    
  4. Na chamada WSman.CreateSession, especifique os sinalizadores de conexão de sessão apropriados no parâmetro flags. Para obter mais informações, consulte Constantes de sessão. Especifique o computador de destino com um nome de computador totalmente qualificado ou um endereço IP e o transporte – http ou https. Esse script solicita a autenticação Kerberos do serviço WinRM remoto.

    Ao contrário dos scripts WMI, você pode usar vários métodos de autenticação em scripts WinRM. Para obter mais informações, consulte Autenticação para conexões remotas.

    iFlags = objWsman.SessionFlagUseKerberos Or _
      objWsman.SessionFlagCredUserNamePassword
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer, _
      iFlags, objConnectionOptions)
    
  5. Depois que o objeto de sessão estiver disponível, você poderá chamar qualquer um dos métodos de objeto Session para obter dados para um recurso. Você pode obter dados para qualquer recurso disponível no computador no qual a sessão está em execução. Para obter mais informações, consulte Obtendo dados do computador local.

O exemplo de código VBScript a seguir mostra o script completo. O script inclui uma sub-rotina para transformar os dados de XML bruto para forma legível por humanos. Para obter mais informações, consulte Exibindo a saída XML de scripts WinRM. O script especifica a autenticação Kerberos, mas se o computador remoto estiver em um grupo de trabalho em vez de um domínio, especificar Kerberos gerará um erro.

Const RemoteComputer = "ComputerName.domain.com"

Set objWsman = CreateObject("Wsman.Automation")
Set objConnectionOptions = objWsman.CreateConnectionOptions
objConnectionOptions.UserName = "Username"
objConnectionOptions.Password = "Password"
iFlags = objWsman.SessionFlagUseKerberos Or _
  objWsman.SessionFlagCredUserNamePassword
Set objSession = objWsman.CreateSession("https://" & RemoteComputer, _
  iFlags, objConnectionOptions)
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" & _
  "wmi/root/cimv2/Win32_OperatingSystem"
Set objResponse = objSession.Enumerate(strResource)

While Not objResponse.AtEndOfStream
    DisplayOutput(objResponse.ReadItem) 
Wend

'****************************************************
' Displays WinRM XML message using built-in XSL
'****************************************************
Sub DisplayOutput(strWinRMXml)
    Dim xmlFile, xslFile
    Set xmlFile = CreateObject("MSXml2.DOMDocument.3.0") 
    Set xslFile = CreateObject("MSXml2.DOMDocument.3.0")
    xmlFile.LoadXml(strWinRMXml)
    xslFile.Load("WsmTxt.xsl")
    Wscript.Echo xmlFile.TransformNode(xslFile) 
End Sub

Sobre o Gerenciamento Remoto do Windows

Usando o Gerenciamento Remoto do Windows

Referência de gerenciamento remoto do Windows