Eu fiz a mesma pergunta que você e desenvolvi algo com o powershell (script interno do Windows) usando técnicas do Blog do Scripting Guy aqui e aqui . O script é executado continuamente como um processo em segundo plano, que você pode iniciar no logon do sistema com o agendador de tarefas. O script será notificado sempre que uma nova unidade for conectada e, em seguida, fizer algo (aqui você configura o script em vez da tarefa). Como ele é basicamente pausado enquanto aguarda a próxima unidade conectada, você não deve achar que ele consome muitos recursos. Aqui vou eu:
1) Inicie o Powershell ISE, que pode ser encontrado em seu menu Iniciar em Accessories / Windows Powershell.
2) Copie e cole o seguinte no 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) Você precisa modificar o script acima para informar ao script qual unidade procurar e o que executar. As duas linhas a serem mudadas são:
-
if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')
Meu disco rígido usb chamado 'Mirror' é definido como a unidade Z :. Você poderia usar apenas
if ($driveLabel -eq 'MyDiskLabel')
se não se importasse com a carta. -
start-process "Z:\sync.bat"
Caminho de qualquer tarefa que você queira fazer. No meu exemplo, criei um arquivo de lote na minha unidade USB que inicia 3-4 tarefas de backup, mas pode ser qualquer coisa.
4) Quando estiver pronto, salve seu script em algum lugar (extensão .ps1) e, em seguida, crie uma tarefa no Agendador de Tarefas para que seu script seja executado em segundo plano. O meu parece assim:
- Acionador: ao fazer logon
- Ação: iniciar um programa
- Programa / script: powershell
- Adicionar argumentos: -ExecutionPolicy Irrestrito -Arquivo "D: \ Stuff \ Backup script.ps1"
5) Voilà!
6) Coisas extras: Se você quiser que sua janela de script seja oculta, use estes argumentos:
- Adicionar argumentos: -WindowStyle Hidden -ExecutionPolicy Irrestrito -Arquivo "D: \ Stuff \ Backup script.ps1"
Se você deseja gerar as mensagens de script em um arquivo de log (que é substituído toda vez que o script é iniciado, ou seja, no logon), use a seguinte ação:
- Programa / script: cmd
- Adicionar argumentos: / c powershell -WindowStyle Hidden -ExecutionPolicy Irrestrito -Arquivo "D: \ Stuff \ Backup script.ps1" > "D: \ Stuff \ script log.txt"
Sempre que você quiser terminar o script oculto em execução, você pode finalizar o processo "Powershell" no Gerenciador de Tarefas.