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 | Sí |
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
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.
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?
urpiano said
David: ¿Al decir conectar a un sitio público, exáctamente a qué te refieres?
urpiano said
Aritz: ¿Exáctamente qué quieres decir con un servidor remoto y qué error te da?
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
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
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
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.
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.
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?
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.
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?
patyy said
tienes razon es algo inutil
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 !!! :-(
urpiano said
José Luis,
La verdad, me quedé alucinado cuando leí tu primer mensaje. No te preocupes, no pasa nada. :-)
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
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.
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?
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
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.
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!!!
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»
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
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
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
urpiano said
Gustavo,
A mandar…. Jamones :-)
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!
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
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???
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
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.
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.
mariano said
yo necesito ejecutarlo a todos equipos miembros de un grupo de seguridad, que modificacion tendria que realizar
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
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.
urpiano said
MAURICIO,
Mira si esto te podría ayudar:
AD-COIT v2.52, Inventory Tool Released on Sourceforge
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,
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:\”
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
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
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
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?
lilis said
Buen dia
tengo una duda de donde obtengo el comando-remoto.vbs ??
mil gracias
lilis said
gracias.
lo voy a correr.
Gerardo said
Lilis
de donde se obtiene??
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 =).
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
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
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
urpiano said
Yusheidy,
Lamento decirte que yo de Borland C++…….
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
urpiano said
Alexmax,
¿Que versión de sistema operativo tiene el equipo de destino? Parece como si no tuviera los objetos WMI necesarios para la ejecución del script.
Revisa si está bien esta configuración:
http://support.microsoft.com/?scid=kb%3Ben-us%3B281888&x=14&y=12
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)
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.
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”
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í:
miguel angel said
Amigaso donde me puedo bajar este script
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.
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
urpiano said
Leonel,
¿Cómo lanzas el script exáctamente?
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
Miguel Angel said
Amigaso un favor, dond puedo bajarme este scrip para probarlo..ayudis
urpiano said
Miguel Angel,
Pues aquí mismo. Copia el código del script, lo pegas en un bloc de notas, guardas el fichero y le cambias la extensión a vbs.
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.
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
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.
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!
AYUDA Script para maquinas virtuales « 3lhacker – Comunidad Informatica said
[…] 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 […]
tester ping said
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.
vacation reply said
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
pinterest.com said
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.
imgur.com said
Very quickly this web page will be famous amid all blogging people, due to it’s nice articles or reviews
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!
eduardogalab said
Hola amigo, esto este código funciona para equipos que solo tienen office(usuario normales en un empresa)?