Você tem experiência com o WMI ( Gerenciamento do Windows Instrumentação )? É perfeito para esse tipo de tarefa. Além disso, faz parte do Windows, portanto, deve causar sobrecarga mínima.
Abaixo está um exemplo de um script Perl que executa algumas ações simples quando uma unidade USB é conectada. Seu script não precisa estar em Perl, o WMI suporta toda uma gama de linguagens de script e programação.
Algumas variáveis
use Win32::OLE::Const 'Microsoft WMI Scripting';
my $ComputerName = "localhost";
my $NameSpace = "root/cimv2";
my $WbemServices = Win32::OLE->GetObject("winmgmts://$ComputerName/$NameSpace");
Registrar evento (usb conectado)
my $Instance = $WbemServices->Get(__EventFilter)->SpawnInstance_();
$Instance->{Name} = "myfilter";
$Instance->{QueryLanguage} = "WQL";
$Instance->{Query} = qq[SELECT * FROM __InstanceCreationEvent WITHIN 1
WHERE TargetInstance ISA 'Win32_LogicalDisk'
and TargetInstance.Name<>'B:'
and TargetInstance.Name<>'A:'];
# there are other queries possible
my $Filter = $Instance->Put_(wbemFlagUseAmendedQualifiers);
my $Filterpath = $Filter->{path};
Definir ação
# example 1 : execute script
my $Instance = $WbemServices->Get(ActiveScriptEventConsumer)->SpawnInstance_();
$Instance->{Name} = "myscript";
$Instance->{ScriptingEngine} = "PerlScript";
$Instance->{ScriptText} = q[open FILE, ">>C:\\usb.txt";print FILE "USB plugged in\n";];
# you could call your backup script / check for dates / etc.
# example 2 : execute command
my $Instance = $WbemServices->Get(CommandLineEventConsumer)->SpawnInstance_();
$Instance->{Name} = "mycommand";
$Instance->{CommandLineTemplate} = "echo Hello world!";
# you could call your backup script / check for dates / etc.
my $Consumer = $Instance->Put_(wbemFlagUseAmendedQualifiers);
my $Consumerpath = $Consumer->{path};
Evento e ação do link
my $Instance = $WbemServices->Get(__FilterToConsumerBinding)->SpawnInstance_();
$Instance->{Filter} = $Filterpath;
$Instance->{Consumer} = $Consumerpath;
my $Result = $Instance->Put_(wbemFlagUseAmendedQualifiers);
Esta é uma forma de registro permanente de eventos. Para desativar e limpar todo o processo, remova os objetos criados:
- a instância __EventFilter "myfilter"
- a instância de __EventConsumer "myscript" ou "mycommand"
- a instância __EventToConsumerBinding
Você pode pesquisar os objetos usando o WMI CIM Studio. Disponível para download da Microsoft gratuitamente, aqui .