[英]Monitor a directory with FileSystemWatcher
我有一个正在被某些程序填充的目录。 我想监视此目录,并检查文件是否不断添加到该目录中。 如果例如5分钟,没有文件被添加到目录,我想得到通知。 文件也将被删除,但我只需要关心新文件。
该脚本每三个小时运行大约20分钟。
FileSystemWatcher的代码:
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\temp\test"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$created = Register-ObjectEvent $watcher "Created" -Action {
write-host "Created: $($eventArgs.FullPath)"
Get-Date -Format "HH:mm:ss" | Out-File "C:\temp\log.txt" -Append
}
我不知道该如何做到这一点,我为我的每一次输入都感到感谢。
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 Task Scheduler中的脚本每五分钟运行一次。
它会找到目录中编辑的最新文件。
无需FileSystemWatcher
您可以通过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
。 然后,您可以使用它来决定是否发送电子邮件。
注意 :如果此程序连续运行,请确保定期将日志文件翻转以保持处理进度。 由于您没有在日志文件中包含日期,因此您必须每天至少滚动一次日志文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.