Saltar al contenido

Comenzando la tarea programada al detectar la conexión del dispositivo USB

No busques más en otras páginas ya que has llegado al lugar justo, poseemos la respuesta que quieres hallar pero sin complicaciones.

Solución:

El hilo Programador de tareas: ¿Cómo sincronizar automáticamente mi unidad flash USB? tiene esta respuesta de un usuario llamado monotone, que usa PowerShell junto con el Programador de tareas:

Tenía la misma pregunta que usted y resolví algo con powershell (scripting integrado de Windows) utilizando técnicas del blog Scripting Guy aquí y aquí. El script se ejecuta continuamente como un proceso en segundo plano, que puede iniciar al iniciar sesión en el sistema con el programador de tareas. El script será notificado cada vez que se conecte una nueva unidad y luego haga algo (aquí configura el script en lugar de la tarea). Dado que básicamente está en pausa mientras espera la siguiente unidad conectada, no debería encontrar que consume muchos recursos. Aquí voy:

1) Inicie Powershell ISE, que se puede encontrar en su menú de inicio en Accesorios/Windows Powershell. 2) Copie y pegue lo siguiente en Powershell:

#Requires -version 2.0
Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange
write-host (get-date -format s) " Beginning script..."
do
$newEvent = Wait-Event -SourceIdentifier volumeChange
$eventType = $newEvent.SourceEventArgs.NewEvent.EventType
$eventTypeName = switch($eventType)

1 "Configuration changed"
2 "Device arrival"
3 "Device removal"
4 "docking"

write-host (get-date -format s) " Event detected = " $eventTypeName
if ($eventType -eq 2)

$driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName
$driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
write-host (get-date -format s) " Drive name = " $driveLetter
write-host (get-date -format s) " Drive label = " $driveLabel
# Execute process if drive matches specified condition(s)
if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')

write-host (get-date -format s) " Starting task in 3 seconds..."
start-sleep -seconds 3
start-process "Z:sync.bat"


Remove-Event -SourceIdentifier volumeChange
 while (1-eq1) #Loop until next event
Unregister-Event -SourceIdentifier volumeChange

3) Debe modificar la secuencia de comandos anterior para indicarle qué unidad debe buscar y qué ejecutar. Las dos líneas a cambiar son:

if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')

Mi disco duro USB llamado ‘Mirror’ está configurado como la unidad Z:. Podrías usar if ($driveLabel -eq 'MyDiskLabel') si no te importó la carta.

start-process "Z:sync.bat"

Ruta de cualquier tarea que quieras hacer. En mi ejemplo, he creado un archivo por lotes en mi unidad USB que inicia 3-4 líneas de comando de tareas de copia de seguridad.

4) Cuando haya terminado, guarde su secuencia de comandos en algún lugar (extensión .ps1), luego vaya a crear una tarea en el Programador de tareas para que su secuencia de comandos se ejecute en segundo plano. El mío se ve así:

  • Disparador: Al iniciar sesión
  • Acción: Iniciar un programa
  • Programa/script: powershell
  • Agregar argumentos: -ExecutionPolicy Unrestricted -File "D:StuffBackup script.ps1"

5) ¡Voila!

6) cosas adicionales:

Si desea que la ventana de su script esté oculta, use estos argumentos:

  • Agregar argumentos:
    -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:StuffBackup script.ps1"

Si desea generar los mensajes del script en un archivo de registro (que se sobrescribe cada vez que se inicia el script, es decir, al iniciar sesión), use la siguiente acción de tarea:

  • Programa/guión: cmd
  • Añadir argumentos:
    /c powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:StuffBackup script.ps1" > "D:Stuffscript

    registro.txt”

En cualquier momento que desee finalizar el script oculto en ejecución, puede finalizar el proceso “Powershell” en el Administrador de tareas.

El único inconveniente es que no se ejecutará nada cuando inicie su computadora con la unidad ya enchufada. (Sin embargo, el script podría cambiarse para realizar una primera verificación inicialmente, ¡pero ya tuve suficiente por hoy!)

Como ya expliqué en esta discusión (pero se trataba de ejecutar un programa cuando se extrae una unidad USB), Quitar USB de forma seguraaunque no es gratuito, puede ejecutar un programa cuando se activan algunos eventos sobre dispositivos USB:

Otra característica de USB Safely Remove que lo distingue de un software similar es iniciar cualquier aplicación no solo después de conectar un dispositivo, pero también antes de quitarlo. La función de ejecución automática le permite configurar la copia de seguridad de datos antes de desconectar un disco duro extraíble, ejecutar Total Commander con el contenido del pen-drive, desmontar automáticamente una unidad TrueCrypt cifrada antes de desconectar el dispositivo USB, etc.

ingrese la descripción de la imagen aquí

Por supuesto, esto no responde completamente a la pregunta, ya que no se trata de usar tareas programadas, pero creo que el objetivo es el mismo, que es ejecutar un programa específico cuando se conecta una memoria USB.

Debería ser bastante fácil usar EventVwr.

  1. Encuentre el evento que desea: cuando conecté un dispositivo de almacenamiento masivo USB, se activaron los siguientes eventos (en la categoría de aplicación): 20001, 20003, 7036 y algunos otros menos relevantes. Asegúrese de probar esos eventos con otros eventos de dispositivos USB para evitar false positivos

  2. haga clic con el botón derecho en el evento y haga clic en “Adjuntar tarea a este evento” (relevante solo en Windows Vista o superior – para XP hay CLI EventTrigger), elija “Iniciar un programa” y señale el script que desea ejecutar.

  3. Para pasar al script los parámetros del evento necesitas echar un vistazo a este artículo. En los eventos 20001 y 20003 puede encontrar la ruta UNC al nuevo almacenamiento. Con la utilidad Sysinternals Junction, puede crear enlaces a las rutas UNC.

Tienes la opción de añadir valor a nuestra información cooperando tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *