复制文件和文件夹后,防病毒扫描
问题描述:
我想在启动时在后台一个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
重新实施车轮。
好的,谢谢。有没有办法让Powershell进程继续运行?它似乎在10秒内退出并且不会重新启动 –
在脚本末尾添加一个无限循环:'while($ true){Start-Sleep -Milliseconds 100}'。并且重新进行重复:SEP已经可以完成您想要的任何事情。没有任何PowerShell的线。 –