复制文件和文件夹后,防病毒扫描

问题描述:

我想在启动时在后台一个Windows   2012服务器上运行一个PowerShell脚本执行以下操作:复制文件和文件夹后,防病毒扫描

  • 手表的文件夹和所有子文件夹(而不是计划任务;需要“活”)
  • 调用防病毒扫描(如果有人熟悉赛门铁克,我想利用
  • 如果文件“干净”,将文件复制到目标文件夹;隔离那些不
  • 记录所有活动

我发现位和代码段和内置骨架这一点,但我遇到的各种问题。首先,PowerShell脚本在运行少于10秒后退出。然而,在ISE中持续运行。其次,-WindowStyle Hidden不能按我所希望的那样工作。我不希望用户直接知道脚本正在运行。第三(这可能更像是赛门铁克的事),我的“invoke scan”例程似乎注册为1大扫描,而不是单个文件扫描。

任何指导表示赞赏。请解释为什么/为什么不这样做,以及如果我应该使用不同的语言,以及如果我应该把它分成多个脚本。

$incomingfile = "E:\" 
$filter = "*.*" 

$watcher = New-Object IO.FileSystemWatcher $incomingfile, $filter -Property @{ 
    IncludeSubdirectories = $true 
    NotifyFilter = [IO.NotifyFilters] 'FileName, LastWrite' 
} 

$onCreated = Register-ObjectEvent $watcher Created -SourceIdentifier FileCreated -Action { 
    $path = $Event.SourceEventArgs.FullPath 
    $name = $Event.SourceEventArgs.Name 
    $changeType = $Even.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated 

    foreach ($incomingfile in $watcher) { 
     & "C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\DoScan.exe" /ScanFile $path 
    } 
} 

几件事情:

  • 有一个t失踪的守望行动的语句之一:

    $changeType = $Even.SourceEventArgs.ChangeType 
    #     ^^ 
    

    应该不会有效果,不过,因为你”无论如何不要使用该变量。

  • 观察者仅在其父PowerShell进程正在运行时保持活动状态。

  • 您的foreach循环错误。观察者为每个创建的文件启动,因此删除该循环并将该命令直接放入动作脚本块中。

    $onCreated = Register-ObjectEvent ... -Action { 
        $path = $Event.SourceEventArgs.FullPath 
        & "C:\Pro...can.exe" /ScanFile $path 
    } 
    
  • 您希望脚本执行SEP的所有内容都可以自行完成。根本没有必要用FileSystemWatcher重新实施车轮。

+0

好的,谢谢。有没有办法让Powershell进程继续运行?它似乎在10秒内退出并且不会重新启动 –

+0

在脚本末尾添加一个无限循环:'while($ true){Start-Sleep -Milliseconds 100}'。并且重新进行重复:SEP已经可以完成您想要的任何事情。没有任何PowerShell的线。 –