É possível executar a execução automática segura do USB com o Agendador de Tarefas no Windows 7?

5

Descobri que Windows 7 não permitir execução automática em unidades USB .

É possível contornar isso (de maneira segura) configurando uma tarefa com o Agendador de Tarefas, que é acionado quando a unidade USB é inserida? À primeira vista, não consegui encontrar nenhum evento relacionado com o Visualizador de Eventos.

    
por Ville Koskinen 29.08.2009 / 10:09

4 respostas

4

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.

    
por 10.01.2010 / 05:34
2

Não. Você não pode usar o Agendador de Tarefas.

O único evento registrado que é acionado quando você conecta seu dispositivo USB é iniciar o serviço 'Enumeração de Dispositivo Portátil'. Mas você não pode usá-lo no Gerenciador de Tarefas porque o mesmo evento dispara quando qualquer serviço é iniciado e interrompido. (Além disso, o evento não será acionado se o serviço já estiver sendo executado quando você conectar o dispositivo.)

    
por 29.08.2009 / 15:59
1

O USB Safely Remove possui esse recurso: ele pode iniciar um programa quando um dispositivo USB é inserido.

Another USB Safely Remove feature that distinguishes it from similar software is starting any applications not only after connecting a device, but also before removing it. The autorun feature allows you to set up data backup before disconnecting a removable hard drive, to run Total Commander with the contents of the pen-drive, automatically unmount an encrypted TrueCrypt drive before disconnecting the USB media, etc.

    
por 10.01.2010 / 07:46
0

Eu não acho que um agendador de tarefas seja a ferramenta adequada. Você precisa de algo que responda toda vez que um novo dispositivo USB for adicionado. Isso exigiria um aplicativo especializado que pudesse detectar novos dispositivos USB e, portanto, substituiria o recurso de execução automática do Windows.

Sim, esse aplicativo é possível. Seria um desafio criar, no entanto.

Usar o agendador de tarefas significa que você vai começar a execução automática de novo e de novo, de novo, de novo, de novo, de novo, de novo, de novo e de novo e de novo acabou (bem, você começa a foto) novamente. Você precisaria de um mecanismo para evitar o uso da execução automática duas vezes. E você precisa de um mecanismo que detecte se há uma execução automática disponível ou não, senão você acaba com mensagens de erro eternas. É como bater na parede com um martelo, esperando que haja um prego no meio. O agendador não saberia quando começar e quando parar.

    
por 29.08.2009 / 10:50