El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script VBScript Para Ejecutar Un Comando En Un Equipo Remoto

Posted by urpiano en lunes 21 \21\+01:00 May \21\+01:00 2007

Scritp VBScript que permite lanzar un comando en un equipo remoto. El script utiliza el servicio WMI del equipo remoto para lanzar el comando.

Sintaxis

cscript [//nologo] comando-remoto.vbs [/E:nombre equipo] [/U:usuario] [C:contraseña]] [/?] comando

Siendo

Parámetro ¿Requerido? Descripción
/E No
Nombre del equipo remoto; en caso de omitirse se considerará que está en el equipo local.
/U No
Nombre del usuario que se utilizará para conectar con el servicio WMI del equipo. En caso de omitirse se utilizará el usuario que lanza el script. Si se trata del equipo local se ignora, pues no se puede conectar al servicio WMI con credenciales alternativas en el equipo local; en este caso se debe ejecutar desde una ventana de comandos (cmd.exe) abierta con un administrador local usando RunAs, por ejemplo.
/C No
Cuando está establecido el parámetro /U, este parámetro nos permite especificar la contraseña del usuario que conectará con el servicio WMI. Si no está especificado el parámetro U se ignorará. Si está establecido el parámetro U y este parámetro es omitido, el script presentará una ventana de Internet Explorer donde entrar la contraseña. Es recomendable no usar este parámetro, pues implica que se teclea la contraseña y alguien puede verla; como el usuario debe tener derechos administrativos, es peligroso que tengamos la contraseña expuesta. Al usar una ventana de IE para teclear la contraseña, esto se realiza en una caja de texto de tipo password, quedando enmascarada, protegida de ojos indiscretos.
/? No
Muestra la ayuda en línea.
comando
Ruta de la carpeta que se quiere listar.

Ejemplos

cscript comando-remoto.vbs "cmd /c tracert http://www.moria.com>c:\traza.txt"

cscript //nologo comando-remoto.vbs /e:pc-frodo /u:\comarca\peregrin "cscript //nologo c:\Scripts\reset.vbs"

cscript //nologo comando-remoto.vbs /e:portatil-sam /u:comarcaperegrin /c:"soy untuk" "cmd /c gpupdate /force"

Este es el código del script:

'comando-remoto.vbs
'
'Scritp VBScript que permite lanzar un comando en un equipo remoto.
'El script utiliza el servicio WMI del equipo remoto para lanzar el
'comando.
'
'Sintaxis
'
'cscript [//nologo] comando-remoto.vbs [/E:nombre equipo]
'        [/U:usuario] [C:contraseña]] [/?] <comando>
'
'Siendo:
'
'        - /E (opcional):
'
'               Nombre NETBIOS del equipo donde está la carpeta;
'               en caso de omitirse se considerará que está en 
'               el equipo local.
'
'        - /U (opcional):
'
'               Nombre del usuario que se utilizará para conectar
'               con el servicio WMI del equipo. En caso de
'               omitirse se utilizará el usuario que lanza el
'               script. Si se trata del equipo local se ignora,
'               pues no se puede conectar al servicio WMI con
'               credenciales alternativas en el equipo local; en
'               este caso se debe ejecutar desde una ventana de
'               comandos (cmd.exe) abierta con un administrador
'               local usando RunAs, por ejemplo.
'
'        - /C (opcional):
'
'               Cuando está establecido el parámetro /U, este
'               parámetro nos permite especificar la contraseña
'               del usuario que conectará con el servicio WMI.
'               Si no está especificado el parámetro U se
'               ignorará. Si está establecido el parámetro U
'               y este parámetro es omitido, el script presentará
'               una ventana de Internet Explorer donde entrar la
'               contraseña. Es recomendable no usar este parámetro,
'               pues implica que se teclea la contraseña y alguien
'               puede verla; como el usuario debe tener derechos
'               administrativos, es peligroso que tengamos la
'               la contraseña expuesta. Al usar una ventana de IE
'               para teclear la contraseña, esto se realiza en
'               una caja de texto de tipo password, quedando
'               enmascarada, protegida de ojos indiscretos.
'
'        - /? (opcional):
'
'               Muestra la ayuda en línea.
'
'        - comando (requerido):
'
'               Ejecutable y sus opciones que se quiere ejecutar.
'               Si contiene espacios (ya sea en su ruta, nombre 
'               o porque lleva parámetros) se debe encerrar entre
'               comillas
'
'Ejemplos
'
'cscript comando-remoto.vbs "cmd /c tracert www.moria.com>c:\traza.txt"
'
'cscript //nologo comando-remoto.vbs /e:pc-frodo
'        /u:comarca\peregrin "cscript //nologo c:\Scripts\reset.vbs"
'
'cscript //nologo comando-remoto.vbs /e:portatil-sam
'        /u:comarca\peregrin /c:"soy untuk" 
'        "cmd /c gpupdate /force"
'
'
'© Fernando Reyes - Mayo 2007

'Requerimos la declaración de variables
Option Explicit



Dim obj_ServicioWMI, int_Devolucion, int_IdentificadorDeProceso
Dim obj_Proceso, obj_Arranque, obj_Configuracion, int_Equipo
Dim str_Usuario, str_Clave, str_Equipo, str_Comando

Call s_ComprobarParametros

For int_Equipo = 0 To UBound(str_Equipo)

    'Si de nombre se ha pasado un punto, significa
    'equipo local
    If str_Equipo(int_Equipo) = "." Then
    
        str_Equipo(int_Equipo) = _
                 obj_SH.ExpandEnvironmentStrings( _
                                     "COMPUTERNAME")
                                     
     End If
    

'Llamamos a la función que nos permite cargar el objeto
'SWbemLocator. Si la función devuelve False es que no se
'ha podido crear
If Not f_ServicioWMI(obj_ServicioWMI, _
                             str_Usuario, _
                             str_Clave, _
                             str_Equipo(int_Equipo)) Then

    'Lanzamos el mensaje de que ha habido un error en la conexión
    'al servicio WMI
    Wscript.Echo str_Equipo(int_Equipo) & vbtab & "Error 2: error al conectar con el servicio WMI"

    'Terminamos el script con el código de error 2
'    WScript.Quit 2

Else

    'Creamos una instancia de la clase "Win32_Process"
    Set obj_Proceso = obj_ServicioWMI.Get("Win32_Process")
    
    'Creamos una instancia de la clase Win32_ProcessStartup
    'que nos servirá para establecer condiciones de inicio del
    'proceso
    Set obj_Arranque = obj_ServicioWMI.Get("Win32_ProcessStartup")
    
    'Creamos un objeto para establecer la configuración
    'configuración deseada, usando el método SpawnInstance
    'de la clase Win32_ProcessStartup; una vez establecidas
    'las propiedades de este objeto configuración, lu usaremos
    'para lanzar el proceso recibido como parámetro "comando"
    Set obj_Configuracion = obj_Arranque.SpawnInstance_
    
    'Establecemos que se vea la ventana lanzada; sólo funciona
    'en el equipo local, pues la ejecución remota se realiza
    'siempre en ventana oculta cuando usamos WMI
    obj_Configuracion.ShowWindow = 1
    obj_Configuracion.FillAttribute = 29
    
    'Lanzamos el comando recibido como parámetro con las opciones
    'de inicio establecidas. Si la ejecución tiene éxito, el
    'parámetro de salida, recogido con la variable
    'int_IdentificadorDeProceso, devolverá el PID del proceso
    'lanzado 
    int_Devolucion = obj_Proceso.Create(str_Comando, _
                                        Null, _
                                        obj_Configuracion, _
                                        int_IdentificadorDeProceso)
    
    'Si la ejecución ha sido exitosa, mostramos el PID
    'del proceso
    If int_Devolucion = 0 Then
    
    	WScript.Echo "Proceso lanzado con éxito." & vbCrLf & _
    	             "PID: " & int_IdentificadorDeProceso
    	
    	
    Else
    
        WScript.Echo "Error 4: No se pudo ejecutar." & vbCrLf & _
                     "Código de error: " & int_Devolucion
                     
        
    End If

End If

Next 'int_Equipo

Function f_ServicioWMI(obj_ServicioWMI, str_Usuario, _
                       str_Clave, str_Equipo)
'Esta función permite conectar con el servicio WMI de un equipo.
'La conexión puede ser realizada directamente por el usuario
'que ha lanzado el script o por otro usuario cuyas credenciales
'son recibidas como parámetros. La función recibe como parámetro
'un objeto que será utilizado como parámetro de salida, siendo
'creado por la función como objeto de servicio WMI del equipo
'recibido como parámetro

    Dim obj_LocalizadorWMI
    Dim lng_Respuesta
    
    WScript.Echo str_Equipo

    'Si hemos recibido nombre de usuario, debemos conectar
    'al servicio WMI del equipo como el usuario
    'recibido
    If Len(str_Usuario) > 0 Then

        'Para poder especificar unas credenciales alternativas,
        'debemos crear primero un localizador WMI
        Set obj_LocalizadorWMI = CreateObject( _
                                  "WbemScripting.SWbemLocator")

        'Establecemos control de errores
        On Error Resume Next
        'Conectamos con el servicio WMI del equipo con las
        'credenciales pasadas
        Set obj_ServicioWMI = obj_LocalizadorWMI.ConnectServer( _
                                       str_Equipo, "root\cimv2", _
                                       str_Usuario, str_Clave)

        'Si se ha producido algún error...
        If Err.Number <> 0 Then

            'Lo primero es vaciar la variable con el localizador WMI
            Set obj_LocalizadorWMI = Nothing

            'Mostramos el error
            WScript.Echo vbCrLf & vbCrLf & _
                         Err.Number & ": " & Err.Description

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function
            
        End If
        
    Else

        'Podemos conectar directamente con el servicio WMI del equipo
        'sin necesidad de utilizar el localizador WMI ya que no hay
        'que hacerlo con otras credenciales distintas a las del
        'usuario que lanza el script
        Set obj_ServicioWMI = GetObject("winmgmts:\\" & str_Equipo & _
                                        "\root\CIMV2")

        'si se ha producido algún error...
        If Err.Number <> 0 Then

            'Mostramos el error
            WScript.Echo Err.Number & ": " & Err.Description & _
                         vbCrLf & vbCrLf

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function
            
        End If
        
    End If

    'No se han producido errores, devolvemos True
    f_ServicioWMI = True

    'Limpieza de culito :-)
    Set obj_LocalizadorWMI = Nothing

End Function 'f_ServicioWMI

Function f_EntrarClave(str_HTML)
'El propósito de esta función es el proveer al usuario de una caja
'de texto en la que teclear una contraseña sin revelarla, pues
'la caja de texto es de tipo password. Para ello se crea una página
'web que es cargada en un Internet Explorer y se recoge de éste
'la contraseña tecleada y se convierte en la devolucion de la función.
'La ruta y nombre de la página es recibida como parámetro por la
'función, lo que permite reutilizar esta función en más scripts y
'personalizar la página para cada script, lo único que debe ser igual
'en todas las páginas que se quieran utilizar es que el botón debe
'llamarse Aceptar, el control oculto AceptarPulsado y la caja de texto
'Clave.

'Esta función está basada en:
'http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_lppm.mspx?mfr=true

'En el ejemplo de TechNet se pone una ruta local (c:\carpeta\fichero.asp)
'para la ubicación del fichero. Esto no es correcto cuando estamos de
'XP SP2 en adelante, pues la navegación segura interfiere con el script,
'Ya que contiene un script VBScript. Para evitar esto, yo lo que hago
'es situar el fichero en una carpeta compartida y acceder a él con su
'ruta UNC; de esta manera es tratado como de la zona de intranet y no
'hay problemas. También se podría colocar en un servidor Web que fuese
'de la intranet o de los sitios de confianza y referirse a él por su
'ruta http; de hecho esta es la opción deseable si se hace de forma
'segura (hhtps) pues así no podría cazar la contraseña algún gracioso
'que estuviese ejecutando un sniffer.

    'Declaramos variables
    Dim obj_IE

    'Creamos un objeto Internet Explorer
    Set obj_IE = WScript.CreateObject _
              ("InternetExplorer.Application", "IE_")

    'Cargamos el navegador con la página recibida como parámetro
    obj_IE.Navigate "file:///" & str_HTML

    'Con este bucle esperamos a que la página esté completamente cargada
    Do

        WScript.Sleep 10

    Loop Until obj_IE.ReadyState = 4    

    'Establecemos propiedades del navegador
    obj_IE.ToolBar = 0
    obj_IE.StatusBar = 0
    obj_IE.Width = 400
    obj_IE.Height = 250
    obj_IE.Left = 0
    obj_IE.Top = 0
    obj_IE.Visible = 1

    'En este bucle esperamos a que se haya pulsado el botón
    '"Aceptar"
    Do While (obj_IE.Document.All.AceptarPulsado.Value = "")

        WScript.Sleep 250

    Loop

    'Recogemos la contraseña entrada
    str_Clave = obj_IE.Document.All.Clave.Value

    'Cerramos el navegador
    obj_IE.Quit

    'Esperamos a que esté cerrado
    WScript.Sleep 250

    'Establecemos la contraseña como devolución de la función
    f_EntrarClave = str_Clave  

    'Limpiadita de culito :-)
    Set obj_IE = Nothing

End Function 'f_EntrarClave

Sub  s_ComprobarParametros()
'Este procedimiento revisa los parámetros recibidos
'y los asigna a las variables correspondientes, en caso de
'ser correctos

    Dim bol_EquipoLocal,obj_SH
    
    If WScript.Arguments.Named.Exists("?") Then
    
        Call s_Ayuda("************************" & vbCrLf & _
                     "*        AYUDA         *" & vbCrLf & _
                     "************************")
        
        WScript.Quit
    
    End If

    'Revisamos que se ha pasado un comando a ejecutar
    If WScript.Arguments.Unnamed.Count = 0 Then
    
        Call s_Ayuda("Error 1: No se ha indicado el " & _
                    "comando a ejecutar en el equip" & _
                    "o remoto")
                    
        WScript.Quit 1
        
    Else
    
        'Recogemos el comando pasado
        str_Comando = WScript.Arguments.Unnamed(0)
                    
    End If
    
    'Vamos ahora a recoger el nombre del equipo
    'Primero creamos un objeto WshShell
    Set obj_SH = CreateObject("WScript.Shell")
    
    'Si es pasado como parámetro, lo recogemos
    If WScript.Arguments.Named.Exists("E") Then
    
        str_Equipo = Split(WScript.Arguments.Named("E"),",")
        
        
    Else
    
        'Obtenemos el nombre del equipo local y
        'lo asignamos a la variable
        str_Equipo = Array(obj_SH.ExpandEnvironmentStrings( _
                                         "%COMPUTERNAME%"))
                                         
        
    End If
    
    'Si coinciden el nombre del equipo con el nombre del
    'equipo local, vaciamos las variables de usuario y
    'contraseña, pues no se puede conectar con 
    'credenciales alternativas a WMI desde el equipo
    'local; para ello sería necesario lanzar el script 
    'con RunAs. También ponemos a True la booleana que
    'indica si se trata del equipo local
'    If UCase(str_Equipo) = UCase(_
'                 obj_SH.ExpandEnvironmentStrings( _
'                          "COMPUTERNAME")) Then
                          
'        bol_EquipoLocal=True
'        str_Usuario = ""
'        str_Clave = ""
        
'    End If
                                             
    'Ya no necesitamos más el objeto wshShell, así que
    'lo destruimos   
    Set obj_SH = Nothing
        
    'Si se ha pasado usuario, lo recogemos. Si se trata
    'de ejecutar en el equipo local lo ignoraremos, pues
    'no se puede conectar con credenciales alternativas a
    'WMI desde el equipo local; para ello sería necesario
    'lanzar el script con RunAs
    If WScript.Arguments.Named.Exists("U") _
    And Not bol_EquipoLocal Then
    
        str_Usuario = WScript.Arguments.Named("U")
        
        'Si se ha pasado la contraseña, la recogemos
        If WScript.Arguments.Named.Exists("C") Then
        
            str_Clave = WScript.Arguments.Named("C")
            
        Else
        
            'Si no se ha pasado la contraseña, habiendo
            'establecido un usuario, llamamos a la 
            'función que invoca una página html con
            'la que recoger la clave
            str_Clave = f_EntrarClave("https:\\too" & _
                           "ls.midominio.com\clave.htm")
            
            'Si no se ha suministrado contraseña en la
            'página html, terminamos el script
            If Len(str_Clave) = 0 Then
            
                Call s_Ayuda("Error 3: Se ha sumins" & _
                            "trado usuario, para l" & _
                            "a conexión al equipo " & _
                            "remoto, pero no su co" & _
                            "ntraseña.")
                            
                WScript.Quit 3
                
            End If
            
        End If
        
    End If

End Sub 's_ComprobarParametros

Sub s_Ayuda(str_Error)

    WScript.Echo vbCrLf & str_Error & vbCrLf & vbCrLf
    
    WScript.Echo "comando-remoto.vbs"
    WScript.Echo ""
    WScript.Echo "Scritp VBScript que permite" & _
                 " lanzar un comando en un eq" & _
                 "uipo remoto."
    WScript.Echo "El script utiliza el servic" & _
                 "io WMI del equipo remoto pa" & _
                 "ra lanzar el"
    WScript.Echo "comando."
    WScript.Echo ""
    WScript.Echo "Sintaxis"
    WScript.Echo ""
    WScript.Echo "cscript [//nologo] comando-" & _
                 "remoto.vbs [/E:nombre equip" & _
                 "o]"
    WScript.Echo "        [/U:usuario] [C:con" & _
                 "traseña]] [/?] <comando>"
    WScript.Echo ""
    WScript.Echo "Siendo:"
    WScript.Echo ""
    WScript.Echo "        - /E (opcional):"
    WScript.Echo ""
    WScript.Echo "               Nombre NETBI" & _
                 "OS del equipo donde está la" & _
                 " carpeta;"
    WScript.Echo "               en caso de o" & _
                 "mitirse se considerará que " & _
                 "está en "
    WScript.Echo "               el equipo lo" & _
                 "cal."
    WScript.Echo ""
    WScript.Echo "        - /U (opcional):"
    WScript.Echo ""
    WScript.Echo "               Nombre del u" & _
                 "suario que se utilizará par" & _
                 "a conectar"
    WScript.Echo "               con el servi" & _
                 "cio WMI del equipo. En caso" & _
                 " de"
    WScript.Echo "               omitirse se " & _
                 "utilizará el usuario que la" & _
                 "nza el"
    WScript.Echo "               script. Si s" & _
                 "e trata del equipo local se" & _
                 " ignora,"
    WScript.Echo "               pues no se p" & _
                 "uede conectar al servicio W" & _
                 "MI con"
    WScript.Echo "               credenciales" & _
                 " alternativas en el equipo " & _
                 "local; en"
    WScript.Echo "               este caso se" & _
                 " debe ejecutar desde una ve" & _
                 "ntana de"
    WScript.Echo "               comandos (cm" & _
                 "d.exe) abierta con un admin" & _
                 "istrador"
    WScript.Echo "               local usando" & _
                 " RunAs, por ejemplo."
    WScript.Echo ""
    WScript.Echo "        - /C (opcional):"
    WScript.Echo ""
    WScript.Echo "               Cuando está " & _
                 "establecido el parámetro /U" & _
                 ", este"
    WScript.Echo "               parámetro no" & _
                 "s permite especificar la co" & _
                 "ntraseña"
    WScript.Echo "               del usuario " & _
                 "que conectará con el servic" & _
                 "io WMI."
    WScript.Echo "               Si no está e" & _
                 "specificado el parámetro U " & _
                 "se"
    WScript.Echo "               ignorará. Si" & _
                 " está establecido el paráme" & _
                 "tro U"
    WScript.Echo "               y este parám" & _
                 "etro es omitido, el script " & _
                 "presentará"
    WScript.Echo "               una ventana " & _
                 "de Internet Explorer donde " & _
                 "entrar la"
    WScript.Echo "               contraseña. " & _
                 "Es recomendable no usar est" & _
                 "e parámetro,"
    WScript.Echo "               pues implica" & _
                 " que se teclea la contraseñ" & _
                 "a y alguien"
    WScript.Echo "               puede verla;" & _
                 " como el usuario debe tener" & _
                 " derechos"
    WScript.Echo "               administrati" & _
                 "vos, es peligroso que tenga" & _
                 "mos la"
    WScript.Echo "               la contraseñ" & _
                 "a expuesta. Al usar una ven" & _
                 "tana de IE"
    WScript.Echo "               para teclear" & _
                 " la contraseña, esto se rea" & _
                 "liza en"
    WScript.Echo "               una caja de " & _
                 "texto de tipo password, que" & _
                 "dando"
    WScript.Echo "               enmascarada," & _
                 " protegida de ojos indiscre" & _
                 "tos."
    WScript.Echo ""
    WScript.Echo "        - /? (opcional):"
    WScript.Echo ""
    WScript.Echo "               Muestra la a" & _
                 "yuda en línea."
    WScript.Echo ""
    WScript.Echo "        - comando (requerid" & _
                 "o):"
    WScript.Echo ""
    WScript.Echo "               Ejecutable y" & _
                 " sus opciones que se quiere" & _
                 " ejecutar."
    WScript.Echo "               Si contiene " & _
                 "espacios (ya sea en su ruta" & _
                 ", nombre "
    WScript.Echo "               o porque lle" & _
                 "va parámetros) se debe ence" & _
                 "rrar entre"
    WScript.Echo "               comillas"
    WScript.Echo ""
    WScript.Echo "Ejemplos"
    WScript.Echo ""
    WScript.Echo "cscript comando-remoto.vbs " & _
                 """cmd /c tracert www.moria." & _
                 "com>c:\traza.txt"""
    WScript.Echo ""
    WScript.Echo "cscript //nologo comando-re" & _
                 "moto.vbs /e:pc-frodo /u:com" & _
                 "arca\peregrin ""cscript //n" & _
                 "ologo c:\Scripts\reset.vbs"""
    WScript.Echo ""
    WScript.Echo "cscript //nologo comando-re" & _
                 "moto.vbs /e:portatil-sam /u" & _
                 ":comarca\peregrin /c:""soy " & _
                 "untuk"" ""cmd /c gpupdate /" & _
                 "force"""
    WScript.Echo ""


End Sub 's_Ayuda

83 respuestas to “Script VBScript Para Ejecutar Un Comando En Un Equipo Remoto”

  1. David said

    Hola quisiera saber bien cuales son los comandos o la lineas que debo utilizar para realizar una conexión a un sitio publico y poder copiar una información sin utilizar archivos .bat y utilizando archivos vbs.

    gracias por la ayuda.

  2. Aritz said

    He utilizado este script para intentar ejecutar un comando en un servidor remoto y no funciona. ¿Alguien sabe que es lo que falla o como se hace?

  3. urpiano said

    David: ¿Al decir conectar a un sitio público, exáctamente a qué te refieres?

  4. urpiano said

    Aritz: ¿Exáctamente qué quieres decir con un servidor remoto y qué error te da?

  5. sysmaya said

    Tal vez sea que solo funciona en una LAN. para conectar con otro pc en la WAN no es posible, para iniciar 2 problemas. 1 caso que sea linux (WMI solo corre en Windows)
    2. El servicio WMI (Instrumentacion Windos) No este activo

  6. urpiano said

    Hay otra posibilidad, que no esté habilitada la administración remota en el firewall de windows:

    Connecting to WMI on a Remote Computer

  7. Daniel Nava said

    Intento ejecutar un archivo bat en un servidor remoto de mi LAN pero me marca el siguiente herror «No se puede encontrar ‘file:///https:\\tools.midominio.com\clave.htm» asegurese que la direccion de internet es correcta»

    esta direccion que marca en el error no tiene nada que ver con el servidor al que me quiero conectar

  8. urpiano said

    El problema es que hay veces que hago retoques en los scripts que veo tan claros que no llego a probar, y por eso aparecen estos problemas :-(

    Siempre he ejecutado este script situando la página web donde solicita la contraseña en una carpeta de red; como lo mejor es que sea situada en un servidor seguro (https) retoqué el script para que apuntase a una página situada en un servidor seguro, pero puse mal su dirección, poniendo back slash donde debería haber simples slash; es decir puse:

    http:\\tools.midominio.com\clave.htm

    Donde debería haber puesto:

    http://tools.midominio.com/clave.htm

    Esta es una dirección ficticia, que deberías cambiar a una real que tú pongas; puede ser una ruta UNC (\\servidor\carpeta\fichero.htm), una ruta a un servidor Web (http://servidor/fichero.htm) o una ruta a un servidor seguro (https://servidor/fichero.htm). El fichero htm lo puede crear siguiendo las instrucciones que hay en el propio script, en la función f_EntrarClave y poner la ruta en el método s_ComprobarParametros, donde está la llamada a la función f_EntrarClave.

  9. sysmaya said

    el mejor uso de este comando es para copiar un ejecutable en un pc remoto y luego ejecutarlo.

    imagina un virus que se autocopie a todos los pc de una lan y luego los ejecute, asi que no es necesario tener acceso a toda la LAN, basta con entrar a un PC para que toda la red quede infectada.

    otro uso menos oscuro seria para crear instaladores remotos, asi desde un pc se instalan y ejecutan aplicaciones en otros pc.

    El WMI tambien puede ver procesos remotos en otro PC, asi se puede disenar un sistema de monitereo de aplicaciones en toda la lan etc etc.

  10. Daniel Nava said

    Ejecute el script en un equipo local de la siguiente manera:

    cscript //nologo c:\comando-remoto.vbs «cmd ping mi servidor >c:\test.txt»

    y me mando el siguiente error :(

    c:\comando-remoto.vbs(208, 9) Microsoft VBScript runtime error: The remote server machine does not exist or is unavailable: ‘GetObject’

    Me podrias indicar que estoy haciendo mal?

  11. urpiano said

    Gracias, Daniel, había un bug. Dado que el script es concebido para ejecutarse en equipos remotos, el que también permita ejecutar en local no lo tenía comprobado. Prueba con el script corregido.

  12. José luis said

    NO FUNCIONA, simplemente no sirve, no se ejecuta ningún comando en ningún PC remoto, ni dentro de la red, ¿Cuál es la idea de ésto? ¿Engañar?

  13. José luis said

    ¡Dios mío!, lo siento lo siento lo siento lo siento !!!!! lo he hecho funcionar, no entendía muy bien el servicio WMI, mil disculpas por favor, magnífico código….

    Lo siento !!! :-(

  14. urpiano said

    José Luis,

    La verdad, me quedé alucinado cuando leí tu primer mensaje. No te preocupes, no pasa nada. :-)

  15. Juan carlos melendez said

    Ejecute el comando de la siguiente manera:
    cscript //nologo c:\comando-remoto.vbs “cmd ping mi servidor >c:\test.txt»

    (Justo como lo ejecuto Daniel NAva unos coemntarios mas arriba)
    Localmente funciona, entonces itnente con el servidor remoto de la siguiente manera:
    cscript //nologo c:\comando-remoto.vbs “cmd ping mi servidor >c:\test.txt» /E:Miservidor_Remoto

    y me arroja el siguiente error:
    c:\comando-remoto.vbs(172, 5) (null): 0x80041003

    Que estoy haciendo mal???
    Gracias de antemano con la ayuda que me puedas dar

  16. urpiano said

    Juan Carlos,

    Para ejecutarlo en un equipo remoto, necesitas tener privilegios de administrador local en ese equipo remoto, por lo que o lanzas el script desde una ventana de comandos abierta por un usuario que sea administrador local del equipo destino, o usas el parámetro /U para que el script conecte al servicio WMI con otro usuario distinto al que lanza el script.

  17. Daniel said

    Me funciona perfectamente con un servidor remoto windows 2000 server sp4, pero en un windows server 2003 r2 con exactamente el mismo entorno no me funciona, me bota este error:

    -2147024891: Acceso denegado.
    Error 2: error al conectar con el servicio WMI

    que es un error capturado por el programador cuando no se logra la conexión.

    esta es la forma como uso el comando

    cscript //NoLogo comando-remoto.vbs «cmd /c sqlplus user/pass@db @c:\TAREAS\tareas.sql ‘PK02′» /E:192.168.0.2 /U:Administrador /c:mypass

    no se sí puede ser un problema de servicios, o un cambio en el esquema de seguridad de windows 2000 a 2003?

  18. urpiano said

    Daniel,

    A mí me parece que debe ser un problema de firewall o de permisos. Revisa estos artículos, por si te son de utilidad:

    Connecting to WMI on a Remote Computer

    Connecting Through Windows Firewall

  19. Daniel said

    Lo solucioné sacando el servidor del dominio y dejándolo en Dmz. esa era la única diferencia entre el 2000 y el 2003.

  20. Gustavo said

    Hola,
    Tengo la siguiente duda, el cscript me lo lanza perfectamente en una maquina remota, y me da el resultado » Proceso lanzado con exito. PID: 3002″ (por ejemplo) pero en la maquina remota no veo nada que se haya ejecutado tanto aplicaciones como comandos, ¿donde se esta ejecutando? ¿de donde saca el PID si realmente el proceso no existe? Hago exactamente lo mismo pero en local sin poner ni maquina remota ni nada y funciona perfectamente. A la maquina remota esta en mi lan, llego perfectamente y tengo provilegios de administrador tanto local como de dominio, es un xp. ¿que estoy haciendo mal?

    Ejemplo remoto:
    C:\>cscript //nologo comando-remoto.vbs /e:maquina /u:maquina\administ
    rador /c:»password» «calc.exe»
    Proceso lanzado con éxito.
    PID: 3292

    Ejemplo local:
    C:\>cscript //nologo comando-remoto.vbs «cmd /c calc.exe»
    Proceso lanzado con éxito.
    PID: 5400

    Gracias!!!

  21. urpiano said

    Gustavo,

    Es un problema de sesión. Ten en cuenta que la sesión que estableces al ejecutar el script no es la sesión donde se lanza esa calculadora, con lo que no podrás verla. Esto lo puedes ver claramente con tasklist, que te permite listar los procesos que se ejecutan en la máquina local o en una remota; si ejecutas tasklist sobre la máquina en la que ejecutaste el script, verás cómo hay un proceso calc.exe.

    El script está más pensado para tareas que no requieren del interfaz de usuario, como, por ejemplo, listar un directorio y guardar el resultado en un fichero:

    cscript //nologo «cmd /c dir c:\temp > c:\dir-temp.txt»

  22. Gustavo said

    Hola,

    Efectivamente!! si funciona pero como tu dices no esta en la sesion grafica de usuario (esta corriendo por detras) , tenia al menos 20 procesos de calc.exe corriendo ;-)

    Muchas gracias por la respuesta, y una ultima pregunta, ¿es posible elegir la sesion al ejecutar el script?

    Saludos, y felicitar por el buen trabajo del script

  23. urpiano said

    Gustavo,

    Por lo que veo, tú de lo que andas detrás es de que se ejecute una aplicación en la sesión que está abierta en remoto. Eso no se puede hacer con mi script, pues no lo permite la clase Win32_Process:

    Win32_Process Class

    Si eso el que quieres, utiliza PsExec:

    PsExec

    Si vas a usar PsExec, a lo mejor te interesa esta interesante utilidad, que es un interfaz gráfico para lanzar PsExec en uno o varios equipos:

    PsExec GUI Front-End

  24. Gustavo said

    Hola,

    Tienes razon en lo que comentas :-D pero aun asi me sirve el script para lo que quiero conjuntamente con el psExec

    Funciona todo ok
    Muchas gracias!

    un saludo

  25. urpiano said

    Gustavo,

    A mandar…. Jamones :-)

  26. Barrosa said

    Hola he echado un vistazo al script y parece que tiene buena pinta aunque yo no he conseguido usarlo correctamente.

    En equipo local me funciona perfectamente, pero en equipo remoto me sale el siguiente error:

    cscript c:\comando-remoto.vbs /e:nombre-equipo «cmd /C ipconfig /all>c:\traza.txt»
    —————————————————————
    c:\comando-remoto.vbs(208, 9) Error de Microsoft VBScript en tiempo de ejecución
    : Permiso denegado: ‘GetObject’

    La sesión del equipo remoto es de Administrador, tiene el servicio Wmi corriendo y firewall desactivado.

    Qué estoy haciendo mal??

    Un saludo!

  27. urpiano said

    Barrosa,

    Me parece entender que el problema que tienes es que no ejecutas el script como administrador del equipo de destino. Da igual que en el equipo de destino esté logado un administrador, pues la tarea no se ejecuta con el usuario que esté logado en el equipo de destino, si no con el usuario que lanza el script op con el que se especifique con el parámetro /U

  28. Moises said

    Y como haces eso de la pagina web, porque no puedo ejecutarlo hasta ahora, dices que la clave es enviada a una pag html y ahi se lo convierte en tipo pass para que la contraseña no sea capturada. Pero como hacees eso? donde esta el codigo de la pagina html???

  29. Barrosa said

    A mi sigue sin funcionarme :(

    Ahora me sale el siguiente error:
    Error 2: error al conectar con el servicio WMI

    Estan conectados los servicios WMI en las dos computadoras y desactivados los firewales.

    Saludos

  30. Hermenegildo said

    Moises,

    Si te fijas, en el propio código del script urpiano pone un ejemplo de cómo sería esa página, en concreto en la cabecera de la función f_EntrarClave.

  31. urpiano said

    Barrosa,

    Por desgracia, eso es algo que me pasa también con algún equipo, y todavía no he podido saber la causa (tendría que quitarle el equipo al usuario para poder investigarlo, y no lo suelta ni a la de tres :-)) Me pasa en uno de cada 30 equipos, más o menos, y debe ser algo relacionado con la administración remota, o algo así (que estén mal configuradas la directivas locales de ese equipo en la parte de derechos, por ejemplo; es lo malo de herdear dominio ya creados y no muy bien, por cierto). Prueba a ver si PSExec te viene mejor que el script.

  32. mariano said

    yo necesito ejecutarlo a todos equipos miembros de un grupo de seguridad, que modificacion tendria que realizar

  33. MAURICIO said

    que tal mi pregunta aqui esque quiero disenar una aiplicacion que me ayude a adquirir informacion de una computadora como (su nombre, ip, mac, disco duro, memoria ram, y actulizar el windows update y el antivirus) mandar esa aplicacion al un usuario se ejecute, se almacene en un .txt y se vaya a una base de datos que tiene el servidor, como pudiera hacerle si tienes algun algoritmo ya hecho o que comandos puedo usar o como le puedo hacer me ayudarias mucho y te lo agradeceria tu ayuda por favor me podriar escribir a mi correo darkmag@hotmail.com
    grcias

  34. urpiano said

    Mariano,

    En cuanto tenga tiempo (cosa que ultimamente…) crearé otro script basado en éste que permita lanzar lo mismo a más equipos e incluiré la condición de grupo; lo que no te puedo decir es cuándo lo tendré hecho, pues ando muy liado de un tiempo a esta parte (así de abandonado tengo el blog). De momento, lo que puedes hacer es crear un bat que vaya haciendo sucesivas llamadas al script con cada uno de los equipos.

  35. urpiano said

    MAURICIO,

    Mira si esto te podría ayudar:

    AD-COIT v2.52, Inventory Tool Released on Sourceforge

  36. Mario said

    Estimado,

    Como es posible hacer que se copie un archivo de un equipo a otro?, probe lo siguiente:
    cscript //NoLogo comando-remoto.vbs /E:192.168.X.X /U:Equipo\User /c:PASSWORD «CMD copy \\192.168.X.X\CARPETA\test.txt c:\»

    Me dice que se ejecuto correctamente pero no copia nada.

    Por favor si me ayudan.

    Saludos,

  37. urpiano said

    Mario,

    Prueba con cscript //NoLogo comando-remoto.vbs /E:192.168.X.X /U:Equipo\User /c:PASSWORD “CMD /c copy \\192.168.X.X\CARPETA\test.txt c:\”

  38. Jesus said

    hola urpiano
    Primero muchas gracias por adelantado.
    retomando una consulta de gustavo sobre ejecutar un programa en un equipo remoto, he intentado ejecutar un .pps en un equipo remoto con psexec
    psexec \\10.7.101.1 «c:\asturias.pps» -i jmonfe3
    y no reconoce el fichero.
    Creando un bat (ejecutaastur.bat) en el equipo remoto con
    start c:\asturias.pps
    psexec \\10.7.101.1 «c:\ejecutaastur.bat» -i jmonfe3
    lo ejecuta pero como proceso y no se muestra en la sesión de usuario aunque si se escucha el sonido y aparece POWERPNT.EXE como proceso.
    ¿ Que tengo que hacer para que se visualice el pps?

    gracias

    pd podrías mandarme la respuesta a :
    jmonederof@telefonica.net
    jmonedero@oc.mde.es

    gracias

  39. urpiano said

    Jesus,

    Para una cosa así, te recomiendo que en lugar de este script utilices PSEXEC.EXE con el modificador /I:

    PsExec v1.82

  40. luis felipe pinilla said

    buenas noches. necesito el favor que alguien me ayude con esto manejo los sistemas de una empresa y formatee el servidor con windows 2003 sbs con exchange 2003, teniamos configuradas las cuentas de correo con exchange, pero como este requiere de las call por usuario, nos pasamos a pop3 y se perdieron los correos del exchange. revise y encontre un programa para pasar los archivos .ost a .pst y asi lo hice lo malo es que cuando pasan a pst se pierden algunos correos, la lista de contactos, el calendario y las tareas. y necesito estas dos ultimas para toda la parte comercial por que ahi llevaban sus citas y demas.

    ayudenme por favor gracias

  41. Enrico said

    Hola, he ejecutado este script intentando ejecutar otro script que levanta el software instalado en una maquina, me pide el password por el IExplorer y se lo doy… todo funciona, pero no se genera el archivo de salida del segundo script.

    Tambien lo intenté haciendo un dir exportado a un recurso compartido, pero no veo que se genere el archivo…
    C:\>cscript //nologo cremote.vbs /e:EQUIPO /u:EQUIPO\USUARIO «cmd /c dir *.* > \\OTROEQUIPO\COMPARTIDO\lista1.txt»
    Proceso lanzado con éxito.

    Alguna idea?

  42. lilis said

    Buen dia

    tengo una duda de donde obtengo el comando-remoto.vbs ??

    mil gracias

  43. lilis said

    gracias.

    lo voy a correr.

  44. JMDB said

    El script es interesante, pero toda la funcionalidad se centra en 4 lineas, he ejecutado muchas aplicaciones (notepad, calc, mspaint, etc…) pero a la hora de ejecutar un bat, me abre una ventana negra (cmd) y luego se cierra, me fijo en los procesos (ya que la clase Win32_Process debe aparecer ahi) y no aparece nada, el bat se demora aprox 7 minutos en ejecutar, pero al ejecutarlo con tu script no aparece nada.
    Tambien quisiera saber si al ejecutar un bat existe la posibilidad de que los mensajes me los muestre en la misma consola que ejecuto tu script.
    Gracias.

    • urpiano said

      JMBD,

      para ejecutar un bat debes lanzar no el bat directamente, si no un cmd al que pasas el bat, ejemplo:

      cmd /c fichero.bat

      Con cmd /c se ejecuta el bat y se cierra la ventana de comandos al terminar la ejecución, con cmd /k la ventana permanece abierta

      • JMDB said

        Gracias por responder Urpiano, ya pude resolver todos mis problemas y me he metido de fondo con WMI API y digamos que lo estoy dominando, he extraido la parte más importante de tu script e hice uno a mi medida =), pero me parece una molestia la asignación de puertos dinámicos del RPC pero ya estoy por configurar para que asigne un rango establecido, ahora estoy haciendo scripts pero con WUA API, y tengo problemas con ello precisamente al tratar de instalar KB’s remotamente, si has trabajado con ese api agradecería que respondas, gracias =).

  45. Luis Felipe 88 said

    Hola Soy nuevo en esto y pido su ayuda
    Tengo un bat que necesito se instale en forma sileciosa, dentro de este bat hay dos dll al cual los puse se ejecute /s para que asi se instale
    Pero aun asi me sigue mostrnado lo que hace como hago para que con el vbs pueda hacer esto
    gracias

  46. yusbeidy said

    hola buenas tardes estoy viendo el foro y me parece muy practico lo que necesito es saber como puedo hacer una aplicacion en borland c++ para que mi computadora se comunique a otra computadora y despues de lograr eso necesito que se conecte con una aplicacion que se llama tcp test tools estoy urgida de eso ayudenme plis

  47. urpiano said

    Luis Felipe,

    Puedes no usar un BAT si no un VBS para registrar esas DLLs, usando el método Run del objeto wshShell

  48. urpiano said

    Yusheidy,

    Lamento decirte que yo de Borland C++…….

  49. Alexmax said

    Hola Urpiano

    corri el script pero sale este error:

    C:\Documents and Settings\aegomez\Desktop>cscript //nologo comando-remoto.vbs /E
    :servermax /U:max1234 /C:»max1234″ «cmd /c C:\Drivers\windau.bat»

    -2147217394: Invalid namespace
    Error 2: error al conectar con el servicio WMI

    que puedo hacer para solucionarlo,

    Gracias y buen dia

  50. miguel angel said

    Amigo estoy genreando lo siguiente:
    cscript //nologo comando-remoto.vbs /e:BG-ETEC-TECMA07 «cmd /c c:\envio.txt»

    y me sale error 0*80041021 me ayudas por fis que estoy haciendo mal

    • urpiano said

      miguel angel,

      Con esa ejecución estás llamando a un fichero de texto desde una ventana de comandos y al no tratarse de un ejecutable te tiene que dar error (eso suponiendo que en el equipo remoto exista ese fichero, de no ser así el error sería que no se encuentra, no que no es un ejecutable)

  51. xavir said

    el script se daño :( o por lo menos mi navegador no lo permite ver correctamente, sera que lo puedes subir descarga directa desde un txt :D

    • urpiano said

      xavir,

      Es una porquería que WordPress llama «textualización» y que hace, por ejemplo, que aunque yo he escrito comillas dobles normales para encerrar la palabreja, se muestren comillas dobles de inicio y de fin (con distinta inclinación). Esto, que está muy bien para redacciones, para el código es la peste. Se supone que si encierro el código entre <pre><code> y </code></pre>, este será respetado, pero no es así, determinados caracteres, como «<«, «>», «[», «]» y «\» no son respetados, WordPress sencillamente los suprime, así que tengo que poner identificadores HTML en su lugar. En concreto el problema con este script estaba en que omitía los «\». Esto ya lo hacía en su primera publicación y a base de prueba y error vi que si los ponía dobles, me los mostraba bien (es decir, poner «\\» para que muestre «\»); lo malo es que pasado un tiempo empezó a respetar este caracter, con lo que tuve que volver a editar el script poniendo simples los «\»; ahora de nuevo vuelve a no respetarlos ¡¡La madre que trujo a la «textualización» de WordPress!!

      Respecto a lo de poner los scripts como ficheros de texto, ya me gustaría, ya, fue mi primera idea para publicarlos, pero me encontré con que tu pones el script como TXT y cuando lo abres WordPress te lo ha «textualizado» (la mama que lo tratra) y al tratarse de texto plano no puedes reemplazar caracteres por códigos HTML, con lo que es una opción inviable.

      He corregido el script, a ver si ahora no te da problemas.

  52. ricardo said

    Hola, quiesiera saber si me podes dar una mano…

    sinceramente hace un par de horas que estoy con esto y no puedo hacer lo siguiente

    necesito correr un vbs desde mi maquina local xp, aun server 2003 externo a mi red, aparentemente el wmi anda bien ya que cuando pongo otra contraseña me lo comunica…. el script se llama «a.vbs» guardado en mi xp, en c:\security\

    me dice que esta bien pero no hace nada en el server.. ya que tendria que generar un listado el scrip, ya lo he probado ejecutandolo directamente el scrip anda bien en varios servers, pero necesito de esta forma ya que tengo que correrlo en 200 servers…

    cscript //nologo comando-remoto.vbs /E:130.175.215.135 /U:uslhdmgmt141\vzt642 /c:xxxxx «cscript //nologo c:\Security\a.vbs»

    te agradeceria que me ayudes

    Gracias!

    • urpiano said

      Ricardo,

      Date cuenta que el script lo estás referenciando a una ruta local, es decir, al recibir el comando remoto el equipo de destino lo busca en su unidad C:; o se lo hass copiado previamente o no hará nada. Prueba a situal el script en una carpeta de red:

      cscript //nologo comando-remoto.vbs /E:130.175.215.135 /U:uslhdmgmt141\vzt642 /c:xxxxx “cscript //nologo \\servidor\Security\a.vbs”

  53. oscar said

    Hola

    Necesito que me ayudes por favor
    Tengo que hacer un script que me conecte a un servidor, haga la copia de un fichero me lo traiga a mi maquina y luego borre la conexion al servidor yo me he bajado esto pero no funciona y ademas no lo entiendo muy bien no se que hace ni como modificarlo para mi uso aqui lo adjunto a ver si puedes ayudarme por favor
    Gracias

    echo servidor servidor1
    net use \\ servidor1\d$ password /user:centrales\user
    xcopy \\ servidor1\d$\ c:\ servidor1\ /E /PURGE /ZB /LOG:backup.txt /TEE /R:0 /M /XD RECYCLER\ /SEC
    net use \\ servidor1\d$ /delete

    • urpiano said

      Oscar,

      Ese script es parecido a lo que necesitas. Si se trata de un solo fichero no es necesario que se use xcopy, te basta con copy. Vamos a suponer que el fichero a cpiar es \\bacterio-pc\inventos\armas.txt, que lo copiaremos a c:\locurasbacteriales\, que el usuario con el que accederemos a la carpeta compartida es TIA\Bacterio y su contraseña es FocaOfelianica. El script sería así:

      net use \\bacterio-pc\inventos /user:TIA\Bacterio FocaOfeliana
      copy \\bacterio-pc\inventos\armas.txt c:\locurasbacteriales
      net use \\bacterio-pc\inventos /delete
  54. miguel angel said

    Amigaso donde me puedo bajar este script

  55. Cosme said

    Muchas Gracias Urpiano:

    Me has salvado de un apuro bueno, los amigos de Microsof, han deshabilitado el servicio de Mensajería en Windows 2008 (ya no se puede hacer un net send), y gracias a tu script, y el disponer de un segundo servidor en Windows 2003, he podido salvar una situación bastante engorrosa en un cliente.

    Muy buen trabajo, un saludo.

  56. leonel said

    intento pero me dice

    error de entrada : no se encuentra el archivo de comando «c:comando-remoto.vbs»

    cual es mi error ?

    saludos

  57. Paul Rodríguez Cuevas said

    Hola Urpiano.
    tengo este scrip que me activa y desactiva un usuario, pero me gustaría hacerlos desde mi equipo.
    el equipo al que estoy intentando activar el usuario esta en la dmz
    tambien querria encriptarlo ya que seguro que hay que poner user y pws.

    strComputer = «nieve»
    Set objUser = GetObject(«WinNT://» & strComputer & «/prueba»)

    objUser.AccountDisabled = True
    objUser.SetInfo

  58. Miguel Angel said

    Amigaso un favor, dond puedo bajarme este scrip para probarlo..ayudis

  59. maraudervz said

    Hola,
    He estado probando el scrip, y he obtenido resultados cuando ejecuto comandos remotos que ya exixten en el ordenador (calc.exe, etc…) pero cuando intento ejecutar un .exe que está en un servidor y pongo la ruta UNC «\\SERVIDOR|\CARPETA\EJECUTABLE.EXE», siempre me da:

    Error 4: No se ha podido ejecutar.
    Código de error: 9

    he revisado los permisos en la carpeta de origen y el usuario que lanza el script tiene permisos totales sobre la misma.
    Me pregunto si es posible hacer esto, ya que combinandolo con un archivo por lotes y un FOR puedo ejecutarlo en todos lo equipos de la red y que se instale la aplicación que está en el servidor.

    Alguna sugerencia?

    Gracias.

  60. Roman said

    buenas noches Urpiano, ante todo muchas gracias por tu publicacion hace tiempo estaba buscando algo parecido a esto, para usarlo en mi red LAN, tengo el siguiente problema, he probado con ejecutar cmd y/o calc.exe desde un equipo XP a uno win7 y me carga el proceso pero no me lo muestra, osea, en el administrador de tareas veo el cmd y el calc.exe cargados pero no me los muestra en pantalla

    C:\>cscript //nologo comando-remoto.vbs /E:romero1 /U:roman /C:r6j6r7c4 calc.exe

    ese es el comando que ejecuto

    de antemano gracias

    • César said

      En los comentarios del código del script te comenta lo que te esta pasando:

      ‘Establecemos que se vea la ventana lanzada; sólo funciona
      ‘en el equipo local, pues la ejecución remota se realiza
      ‘siempre en ventana oculta cuando usamos WMI

  61. César said

    Buenas tardes.

    Estoy realizando un script que me genere un csv con las caracteristicas HW de los servidores miembros del AD. El problema es que estoy en un entorno de varios sitios y desde ningún DC del dominio tengo conectividad con TODOS los equipos miembros.

    La opción que se me ha ocurrido es implementar parte de tu código como una función en el scrip general para lanzar en un DC alternativo un scrip (reducido) que se conecte y extraiga los datos por WMI. El problema es que no se si una vez creado el proceso remoto que ejecute el script desde el DC alternativo, el script principal se queda esperando o si por el contrario continua…. Cuando se manda el PID del proceso remoto creado es cuando se crea no cuando finaliza la ejecución del mismo.

    Script01.vbs:
    Desde DC1.
    Conecto con el AD y capturo las cuentas de maquina.
    – Me conecto al equipo y por WMI capturo los datos HW que me interesen y los escribo en un *.txt.
    – Si falla la conexión WMI al equipo remoto (SRV. Miembro del AD).
    – Función de PROCESO_REMOTO y ejecuto en un DC alternativo (DC2) del AD el script reducido (script2.vbs):
    strComando = «cscript //nologo \\DC1\g$\prueba\script02.vbs /e:SRV1 /u:usuario /c:Password»
    – En este punto es donde me surjen las dudas:
    – La ejecución remota me podría pasar una variable tipo string, para que el script principal la escriba en el *.txt?
    – El scrip principal se espera a que finalice la ejecución del script en el servidor remoto o continuaría en el momento en el que se crea el proceso en el DC2?

    Saludos,
    César.

    • urpiano said

      César

      ¿Por qué no usas PsExec para ejecutar en remoto el mismo script que ya tienes?

      • César said

        En eso estoy ahora, pero lo que lanzo es el script02. No lanzo el mismo script, porque el primero esta preparado para ser utilizado con una lista de servidores y el scrip02 es para un solo servidor. Lo que estoy viendo es que al lanzar el PsExec, yo creia que esperaba la finalización del PsExec y al parecer no me esta esperando por lo que no encuentra el archivo de resultados y siempre me dice que la ejecución ha fallado y no me añade los datos… voy a ver si doy con la causa de que no espere a la finalización del PsExec y lo soluciono.
        Gracias.

  62. Giovanny said

    Urpiano, te felicito es un Script excelente… pero fijate que cuando lo corro mediante red LAN … todo perfecto.. pero cuando intento correlo apuntando a una laptop via inalambrica… no puedo.. a que se debe? … mil mil gracias de antemano y felicitaciones por esta gran aportación!!! Gio!

  63. […] script es este https://urpiano.wordpress.com/2007/05/21/script-vbscript-para-ejecutar-un-comando-en-un-equipo-remoto… el comando que ejecuto con el cmd desde la maquina fija esta bien, porque con mi IP de la maquina […]

  64. You made some decent points there. I checked on the web to learn more about the
    issue and found most individuals will go along with your views on this web site.

  65. I think this is among the most vital information
    for me. And i am glad reading your article.
    But should remark on few general things, The web site style is wonderful,
    the articles is really great : D. Good job, cheers

  66. I have read some excellent stuff here. Certainly price bookmarking for revisiting.
    I surprise how a lot effort you set to create this kind of fantastic informative web site.

  67. imgur.com said

    Very quickly this web page will be famous amid all blogging people, due to it’s nice articles or reviews

  68. Orville said

    Woah! I’m really digging the template/theme of this website.
    It’s simple, yet effective. A lot of times it’s
    very difficult to get that «perfect balance» between usability and visual
    appeal. I must say you’ve done a superb job with this.
    In addition, the blog loads super fast for me on Chrome.
    Exceptional Blog!

  69. eduardogalab said

    Hola amigo, esto este código funciona para equipos que solo tienen office(usuario normales en un empresa)?

Replica a Gerardo Cancelar la respuesta