Назад | Перейти на главную страницу

Самый быстрый запуск антивирусного сканирования в реальном времени

У меня проблема в том, что в каждой резервной копии моей почтовой системы (файловый архив в Windows Server 2012 R2) возникают ошибки при резервном копировании зараженных вирусом файлов вложений электронной почты. Это вызвано сканированием в реальном времени (в моем случае TrendMicro OfficeScan), которое не распознало вирусы во время получения и удаляло их во время доступа к файлам, что вызывает ошибки резервного копирования.

Мой вопрос: каков самый быстрый и эффективный способ запуска антивирусной проверки всех файлов в известном каталоге? D:\mail\ с известным расширением файла .$01?

В своем исследовании я не нашел способа ручного антивирусного сканирования на основе интерфейса командной строки для TrendMicro Office Scan.

Моя идея - просто прочитать все файлы, чтобы, надеюсь, запустить сканирование в реальном времени.

Хорошо, я получил это довольно быстро. Но я не уверен, что это все, чего мы можем достичь.

Только перечисление файлов не запускало av-сканирование, поэтому нам нужно заглянуть внутрь. Более конкретно: мы должны открыть файл.

Вот что я придумал: сценарий PowerShell, запускаемый перед резервным копированием в заданном каталоге архива.

$d=Get-ChildItem -Filter '*.$01' -Recurse;
% {try{$_.OpenRead().Close()}catch{}} -InputObject $d -ErrorAction SilentlyContinue

В моем демонстрационном примере с 44 каталогами, 29000 файлов, 1488 из них *.$01-файлов для проверки и 2 из них с вирусами, этому сценарию потребовалось всего 345 мс. Что для меня довольно удобно.

Дальнейшие мысли:

  • похоже, что дескрипторы файлов закрываются при выходе из PowerShell в результате тысячи файловых дескрипторов
    • как закрыть дескриптор сразу после каждого открытия / закрытия файла?
  • снятие ограничений скорости PowerShell
  • оптимизация ForEach - в % уже работает лучше, чем ForEach-Object
  • перенос кода на С #
  • многопоточный