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

时间:2017-08-06 22:54:36

标签: powershell background move startup

我想在启动时在后台运行Windows 2012 Server上的PowerShell脚本执行以下操作:

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

我已经找到了一些代码并为此构建了一个框架,但我遇到了各种各样的问题。首先,PowerShell脚本在运行不到10秒后退出。然而,在ISE中不断运行。其次,-WindowStyle Hidden并不像我希望的那样发挥作用。我不希望用户直接知道脚本正在运行。第三(这可能更像赛门铁克的事情),我的“调用扫描”例程似乎注册为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
    }
}

1 个答案:

答案 0 :(得分:0)

有几件事:

  • 观察员行动的一个陈述中遗漏了t

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

    不应该有效果,因为你还是不使用那个变量。

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

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

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