特定のイベント(フラッシュドライブの挿入など)が発生したときにタスクを実行するオプションはありますが、月に一度だけ実行しますか?
自動イベントでバックアップスクリプトをフックしようとしています。
OS:Windows 7 x64 Professional
特定のイベント(フラッシュドライブの挿入など)が発生したときにタスクを実行するオプションはありますが、月に一度だけ実行しますか?
自動イベントでバックアップスクリプトをフックしようとしています。
OS:Windows 7 x64 Professional
回答:
WMI(Windows Management Instrumentation)の経験はありますか?この種のタスクに最適です。また、Windowsの一部であるため、オーバーヘッドを最小限に抑える必要があります。
以下は、USBドライブが接続されたときにいくつかの簡単なアクションを実行するPerlスクリプトの例です。スクリプトはPerlである必要はなく、WMIはあらゆる種類のスクリプト言語とプログラミング言語をサポートしています。
いくつかの変数
use Win32::OLE::Const 'Microsoft WMI Scripting';
my $ComputerName = "localhost";
my $NameSpace = "root/cimv2";
my $WbemServices = Win32::OLE->GetObject("winmgmts://$ComputerName/$NameSpace");
イベントの登録(USBプラグイン)
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};
アクションを定義する
# 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};
イベントとアクションをリンクする
my $Instance = $WbemServices->Get(__FilterToConsumerBinding)->SpawnInstance_();
$Instance->{Filter} = $Filterpath;
$Instance->{Consumer} = $Consumerpath;
my $Result = $Instance->Put_(wbemFlagUseAmendedQualifiers);
これは、恒久的なイベント登録の形式です。プロセス全体を無効にしてクリーンアップするには、作成したオブジェクトを削除します。
WMI CIM Studioを使用してオブジェクトを検索できます。こちらからMicrosoftから無料でダウンロードできます。
スクリプトを持っている:
ファイル(/ etc / last_backup)が存在し、X日未満であるかどうかを確認します。それ以外の場合はバックアップしません(価値がないため、別のバックアップが30日以内に発生しました)
存在しない場合、またはX dayxより古い場合、バックアップします。そして、バックアップが100%完了したら、そのファイルに触れます(/ etc / last_backupに触れます)。
そうすれば、最後の完全バックアップがいつ発生したかを知ることもできます(/ etc / last_backupを見てください)
ファイルが存在し、30日未満であるかどうかを確認する方法:
find /etc -mtime -30 | grep /etc/last_backup >/dev/null 2>/dev/null
そしてその直後、$?grepが見つけた場合は「0」になります
そのようにして、バックアップを強制するには、/ etc / last_backupファイルを削除するだけで、次回スクリプトがバックアップを開始します。