Eu tinha a mesma pergunta que você e resolvi algo com o PowerShell (script interno do Windows) usando técnicas do Scripting Guy Blog aqui e aqui . O script é executado continuamente como um processo em segundo plano, que você pode iniciar no logon do sistema com o planejador de tarefas. O script será notificado sempre que uma nova unidade for conectada e, em seguida, faça alguma coisa (aqui você configura o script em vez da tarefa). Como está basicamente em pausa enquanto aguarda a próxima unidade conectada, você não deve encontrar muitos recursos. Aqui vou eu:
1) Inicie o Powershell ISE, que pode ser encontrado no menu Iniciar em Acessórios / 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 alteradas são:
if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')
Meu disco rígido USB chamado 'Mirror' é definido como Z: drive. Você poderia usar if ($driveLabel -eq 'MyDiskLabel')se não se importasse com a carta.
start-process "Z:\sync.bat"
Caminho de qualquer tarefa que você deseja executar. No meu exemplo, criei um arquivo em lotes na minha unidade USB que inicia de 3 a 4 linhas de comando das tarefas de backup.
4) Quando terminar, 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 fica assim:
- Disparador: no logon
- Ação: iniciar um programa
- Programa / script: powershell
- Adicione argumentos:
-ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
5) Voilà!
6) Coisas extras:
Se você deseja que sua janela de script fique oculta, use estes argumentos:
- Adicione argumentos:
-WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
Se você deseja exibir as mensagens de script em um arquivo de log (que é substituído sempre que o script é iniciado, ou seja, no logon), use a seguinte ação da tarefa:
- Programa / script: cmd
- Adicionar argumentos:
/c powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1" > "D:\Stuff\script
log.txt "
Sempre que você quiser finalizar o script oculto em execução, poderá finalizar o processo "PowerShell" no Gerenciador de Tarefas.
A única desvantagem é que nada será executado quando você inicializar o computador com a unidade já conectada. (O script pode ser alterado para executar uma primeira verificação inicialmente, mas eu já tive o suficiente por hoje!)