使用FileSystemWatcher监视目录

时间:2016-10-06 06:04:34

标签: .net powershell filesystemwatcher

我有一个目录被一些程序填满。我想监视此目录并检查文件是否不断添加到目录中。如果例如5分钟没有文件被添加到目录中,我希望得到通知。文件也被删除但我只需要关心新文件 剧本每三小时运行约20分钟 FileSystemWatcher的代码:

<

我不知道如何能够实现这一目标,并且感谢所有的投入。

2 个答案:

答案 0 :(得分:1)

PowerShell脚本不适合连续运行并报告事件。

实现目标的一种方法是使用这样的脚本:

[DateTime] $LastWriteTime = (Get-ChildItem -Path "C:\temp\test" -File | Sort-Object LastWriteTime | Select -Last 1).LastWriteTime
if ($LastWriteTime -le (Get-Date).AddMinutes(-5))
{
    Write-Output "No files added in the last 5 minutes"
    # notify me...
} 

并安排Windows任务计划程序中的脚本每五分钟运行一次。

它找到目录中编辑的最新文件。

不需要FileSystemWatcher

答案 1 :(得分:1)

您可以通过Task Scheduler运行单独的脚本,该脚本使用您的日志文件查看最近5分钟内是否创建了文件。

$log = Get-Content -Path T:\log.txt 
$currentTime = Get-date
$5minutesAgo = $currentTime.AddMinutes(-5)
$FileAdded = $false

foreach($time in $log){
    if((get-date $time) -gt $5minutesAgo){
        $FileAdded = $true
    }
}

If($FileAdded) {
    Write-host "File was added in the last 5mins"
} Else {
    Write-host "No file added in the last 5mins"
    # Add in email code here
}

这将逐行浏览您的日志文件,并检查时间是否在最后一个文件分钟内。然后,如果添加了文件,它会将变量$FileAdded设置为$true。然后,您可以使用此选项来决定是否应发送电子邮件。

注意:如果经常运行此选项,请确保定期滚动日志文件以保持处理速度不变。由于您未在日志文件中包含日期,因此您必须每天至少翻转一次日志文件。