Obtener datos de un equipo remoto

Puede obtener datos o administrar recursos en equipos remotos, así como en el equipo local. La conexión a un equipo remoto en un script de administración remota de Windows es muy similar a realizar una conexión local. Los datos de la instancia de WMI están disponibles y, si el equipo remoto tiene hardware BMC que puede comunicarse mediante el protocolo WS-Management, los datos de Intelligent Platform Management Interface (IPMI) también están disponibles. Para obtener más información, vea Windows Administración remota y WMI y Administración remota de hardware.

Es posible que tenga que crear un objeto ConnectionOptions para especificar información sobre el tipo de autenticación solicitada para el inicio de sesión.

Si la cuenta del equipo remoto tiene el mismo nombre de usuario y contraseña de inicio de sesión, la única información adicional que necesita es el transporte, el nombre de dominio y el nombre del equipo. Debido al Control de cuentas de usuario (UAC), la cuenta remota debe ser una cuenta de dominio y un miembro del grupo Administradores de equipos remotos. Si la cuenta es miembro del equipo local del grupo Administradores, UAC no permite el acceso al servicio WinRM. Para acceder a un servicio WinRM remoto en un grupo de trabajo, el filtrado de UAC para las cuentas locales debe deshabilitarse creando la siguiente entrada del Registro DWORD y estableciendo su valor en 1: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] LocalAccountTokenFilterPolicy.

Para conectarse a un equipo remoto mediante el nombre de usuario y la contraseña de inicio de sesión

  1. Especifique el equipo de destino con un nombre de dominio completo o una dirección IP y asígnelo a una constante. Si se especifica una dirección IPv6, la dirección debe ir entre corchetes.

    Const RemoteComputer = "ComputerName.domain.com"
    
  2. Cree un objeto WSMan .

    Set objWsman = CreateObject("WSMan.Automation")
    
  3. Cree la sesión, especifique el transporte, HTTP o HTTPS y concatenándolo con la constante que representa el equipo de destino.

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

En el siguiente ejemplo de código de VBScript se muestra el script completo. El script incluye una subrutina para transformar los datos de XML sin formato a formulario legible por el usuario. Para obtener más información, vea Mostrar la salida 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 conectarse a un equipo remoto mediante una cuenta diferente

  1. Especifique el equipo de destino con un nombre de dominio completo o una dirección IP y asígnelo a una constante. Si se especifica una dirección IPv6, la dirección debe ir entre corchetes.

    Const RemoteComputer = "ComputerName.domain.com"
    
  2. Cree un objeto WSMan .

    Set objWsman = CreateObject("Wsman.Automation")
    
    
  3. Llame al método WSMan.CreateConnectionOptions para crear un objeto ConnectionOptions . La cuenta del equipo remoto debe ser miembro del grupo de administradores de equipos locales.

    Set objConnectionOptions = objWsman.CreateConnectionOptions
    objConnectionOptions.UserName = "Username"
    objConnectionOptions.Password = "Password"
    
  4. En la llamada WSman.CreateSession , especifique las marcas de conexión de sesión adecuadas en el parámetro flags. Para obtener más información, vea Constantes de sesión. Especifique el equipo de destino con un nombre de equipo completo o una dirección IP y el transporte: http o https. Este script solicita la autenticación Kerberos desde el servicio WinRM remoto.

    A diferencia de los scripts WMI, puede usar varios métodos de autenticación en scripts de WinRM. Para obtener más información, consulte Autenticación para conexiones remotas.

    iFlags = objWsman.SessionFlagUseKerberos Or _
      objWsman.SessionFlagCredUserNamePassword
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer, _
      iFlags, objConnectionOptions)
    
  5. Una vez disponible el objeto de sesión, puede llamar a cualquiera de los métodos de objeto Session para obtener datos de un recurso. Puede obtener datos de cualquier recurso que esté disponible en el equipo en el que se ejecuta la sesión. Para obtener más información, vea Obtener datos del equipo local.

En el siguiente ejemplo de código de VBScript se muestra el script completo. El script incluye una subrutina para transformar los datos de XML sin formato a formulario legible por el usuario. Para obtener más información, vea Mostrar la salida XML de scripts winRM. El script especifica la autenticación Kerberos, pero si el equipo remoto está en un grupo de trabajo en lugar de en un dominio, la especificación de Kerberos genera un error.

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

Acerca de la administración remota de Windows

Uso de la administración remota de Windows

Referencia de administración remota de Windows