Hai esperienza con WMI ( Strumentazione gestione Windows )? È perfetto per questo tipo di compiti. Inoltre, è una parte di Windows, quindi dovrebbe causare un sovraccarico minimo.
Di seguito è riportato un esempio di script Perl che esegue alcune semplici azioni quando viene collegata un'unità USB. Lo script non deve essere in Perl, WMI supporta un'intera gamma di linguaggi di scripting e di programmazione.
Alcune variabili
use Win32::OLE::Const 'Microsoft WMI Scripting';
my $ComputerName = "localhost";
my $NameSpace = "root/cimv2";
my $WbemServices = Win32::OLE->GetObject("winmgmts://$ComputerName/$NameSpace");
Registrati evento (usb collegato)
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};
Definisci azione
# 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};
Collega evento e azione
my $Instance = $WbemServices->Get(__FilterToConsumerBinding)->SpawnInstance_();
$Instance->{Filter} = $Filterpath;
$Instance->{Consumer} = $Consumerpath;
my $Result = $Instance->Put_(wbemFlagUseAmendedQualifiers);
Questa è una forma di registrazione permanente degli eventi. Per disabilitare e pulire l'intero processo, rimuovi gli oggetti creati:
- l'istanza __EventFilter "myfilter"
- l'istanza __EventConsumer "myscript" o "mycommand"
- l'istanza __EventToConsumerBinding
Puoi cercare gli oggetti usando WMI CIM Studio. Scaricabile da Microsoft gratuitamente, Qui .