我遇到一个问题,每次备份我的邮件系统(Windows Server 2012 R2 上的基于文件的存档)时,备份受病毒感染的电子邮件附件文件时都会出错。这是由实时扫描(我使用的是 TrendMicro OfficeScan)引起的,它无法在接收时识别病毒并在文件访问时将其删除 - 这会导致备份错误。
D:\mail\
我的问题是:对已知目录中具有已知文件扩展名的所有文件启动防病毒扫描的最快和性能最友好的方法是什么.$01
?
在我的调查中,我发现没有办法对 TrendMicro Office Scan 进行基于 CLI 的手动防病毒扫描。
我的想法是简单地读取所有文件以期触发实时扫描。
答案1
好的,我很快就搞定了。但我不确定这是否是我们能做到的一切。
仅列出文件不会触发 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
- 将代码移至 c#
- 多线程