Script para ejecutar oculto un bat

Iniciado por all, 12 Febrero 2017, 20:27 PM

0 Miembros y 1 Visitante están viendo este tema.

all

 Hola amigos y gracias de antemano. De mas esta decirles que no soy muy bueno en esto de la programacion de script, pero la verdad me viene una duda y aunque lo he googleado no me ha aparecido nada.
Sabemos que para ejecutar un bat oculto con un script seria:

Código (vb) [Seleccionar]
set objshell = createobject("wscript.shell")
objshell.run "Payload.bat",vbhide


Bien pero para eso tiene que estar el bat en el mismo lugar del script. La pregunta seria como hago para que el script este en otra carpeta, el bat en una usb x y que cuando ponga la usb el script me encuentre la usb y el bat y lo ejecute. No se si me hago explicar

Lo que quiero hacer es ejecuta un bat que este en la usb en la raiz y poner el script en una carpeta, que cuando lo ejecute, me localize la usb y el bat y lo ejecute de modo oculto. Como les digo gracias de antemanos

Eleкtro

#1
Hola.

Con el intrumental de administración de windows (a.k.a WMI) puedes hacer todo lo que necesitas. Puedes suscribirte a eventos del sistema, como al evento de inserción o la extracción de dispositivos extraibles, y obtener la información deseada del dispositivo. Lee sobre las classes de WMI en la MSDN: https://msdn.microsoft.com/en-us/library/aa394084%28v=vs.85%29.aspx

Aquí abajo te dejo este código que hice, completamente funcional. Adáptalo a tus necesidades si es necesario.

Código (vb,28,32) [Seleccionar]
Option Explicit

Dim dirPath, filename, driveLetter, fullFilePath, _
   fso, shell, wmi, wmiQuery, wmiEvent

dirPath  = ""
filename = "Payload.bat"

Set fso      = CreateObject("Scripting.FileSystemObject")
set shell    = createobject("wscript.shell")
Set wmi      = GetObject("winmgmts:\\.\root\cimv2")
Set wmiQuery = wmi.ExecNotificationQuery( _
              "Select * From __InstanceCreationEvent Within 2" & _
                          " Where TargetInstance ISA 'Win32_LogicalDisk'")

Do While True
   Set wmiEvent = wmiQuery.NextEvent()

   If (wmiEvent.TargetInstance.DriveType = 2) And _
      (wmiEvent.Path_.Class = "__InstanceCreationEvent") Then

       driveLetter  = wmiEvent.TargetInstance.DeviceId
       fullFilePath = driveLetter & "\" & dirPath & filename

       Wscript.Echo "Drive " & driveLetter & " has been connected."

       If ( fso.FileExists(fullFilePath) ) Then
           Wscript.Echo "Running " & """" & fullFilePath & """" & "..."
           Call shell.run(fullFilePath, 0)
           ' Exit Do
       Else
           Wscript.Echo """" & fullFilePath & """" & " not found."

       End If

   End If

   Set wmiEvent = Nothing
Loop


¡Saludos!








all

 Genial, pero la verdad, no sale oculto, me pone carteles que me haria falta no salieran. Te pregunto y si quisiera que no me lo agregara a un evento sino, que pusiera el bat en la raiz del usb X, y que teniendo el script en una carpeta de ese mismo usb, se me ejecutara oculto el bat, como lo puedo hacer

Eleкtro

#3
Cita de: all en 12 Febrero 2017, 23:09 PMno sale oculto, me pone carteles que me haria falta no salieran.

No se a que te refieres por "carteles". El código de arriba llama a la función wscript.shell.run() pasándole la constante vbHide (0), es decir, oculto.

En un foro de programación la información detallada es esencial para poder entender sin malinterpretaciones y ayudar a resolver un problema. Intenta ser más específico.




Cita de: all en 12 Febrero 2017, 23:09 PMTe pregunto y si quisiera que no me lo agregara a un evento sino

Se te ha entregado practicamente todo el trabajo regalado con el script de arriba. Como ya dije en su momento, puedes adaptarlo a tus necesidades. No voy a modificar el script que compartí, pero si puedo guiarte en como puedes implementar por ti mismo las modificaciones que necesites llevar a cabo...

Cita de: all en 12 Febrero 2017, 23:09 PMque pusiera el bat en la raiz del usb X, y que teniendo el script en una carpeta de ese mismo usb, se me ejecutara oculto el bat, como lo puedo hacer

Puedes copiar un archivo llamando al método FileSystemObject.Copy(). Aquí tienes la documentación y ejemplos de uso:

Lo de ejecutar un archivo en modo oculto ya sabes hacerlo, pero aun así te dejo por aquí la documentación oficial de MSDN también:

¡Saludos!








all

 Disculpe hermano, si lo he ofendido, no era mi intencion, lo que el que no sabe es como el que no ve y solo necesito que e orientes, el codigo genial, incluso me super sirve, y no, no hace falta que lo modifique, disculpe nuevamente. Aquile pongo las foto de los carteles que me salen:

http://subefotos.com/ver/?5e7abfdc69ad806e16251b1cf0bca347o.jpg

http://subefotos.com/ver/?b55352fca778f63200a01c38c0b50b81o.jpg

Como le dije antes, muchas gracias y disculpe si lo he molestado

Eleкtro

#5
Cita de: all en 13 Febrero 2017, 06:11 AMAquile pongo las foto de los carteles que me salen:

http://subefotos.com/ver/?5e7abfdc69ad806e16251b1cf0bca347o.jpg

http://subefotos.com/ver/?b55352fca778f63200a01c38c0b50b81o.jpg

Hola.

Por lo que mencionas, es obvio que estás teniendo alguna dificultad para comprender lo que ocurre y como solucionarlo. Entonces deberías tratar de leer algún tutorial para aprender el uso básico del lenguaje que estás manipulando antes de intentar ponerte a trabajar con códigos que te resulten difíciles. Solo es un consejo personal.

En el código que te mostré arriba, para que no se te muestren las cajas de mensaje simplemente debes comentar (o borrar) las lineas nº 28 y nº 32... donde dice Wscript.Echo .... O también puedes solucionarlo utilizando CScript.exe en lugar de WScript.exe/doble-click para ejecutar el script.

Lee esto (la documentación es para el lenguaje VB.NET, pero se aplica a VBS también):

¡Saludos!








all

 Todo ok, gracias, supero mis espectativas. Agradecido