所以我有一个powershell脚本,主要是从这里的类似问题中提取的,它可以检测何时将某种类型的文件添加到某个网络并在发生这种情况时发送电子邮件:
Function Watcher{
param ($folder, $filter, $to, $Subject)
$watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $true
EnableRaisingEvents = $true
}
$changeAction = [scriptblock]::Create('
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file $name was $changeType at $timeStamp"
$Body = "The file $name was $changeType at $timeStamp"
Email $to $Subject $Body
')
Register-ObjectEvent $Watcher -EventName "Created" -Action $changeAction
}
但是,我想对此进行修改,以使其对本应用程序有用:现在有一个工具可以将数据(.datx文件)添加到网络(每分钟几个文件),我想收到电子邮件通知,记录数据的那一刻。我如何最轻松地修改它,以便在触发初始监视程序时,它等待以查看是否再次发生并重置(如果重置),然后继续重置(如果没有)?还是最好创建一个全新的脚本?基本上,我该如何使观察者被上载到网络的一个单独的.datx文件激活,但又不能被其中的一系列流触发(除了最后一个)触发它]
batching方法:
Caveat:
System.IO.FileSystemWatcher
类可以报告duplicate
跨批次,这将需要更多的精力-请参见源代码注释。
实施说明:System.IO.FileSystemWatcher
的-Action
脚本块来处理事件,而是在Register-ObjectEvent
循环中Register-ObjectEvent
使用PowerShell的事件Wait-Event
的类似Wait-Event
方法执行
not
队列事件,并且如果在该方法等待时碰巧到达一个事件,则仅报告一个-单事件。Wait-Event
首先创建一批3个文件,然后再创建5个文件的示例输出:FileSystemWatcher