PowerShell FileSystemWatcher Измененные Дубликаты Событий
Вот сценарий PowerShell:
Он прекрасно отслеживает указанную папку, но генерирует две записи об изменениях файлов.
Есть ли способ объединить или просто вернуть одно событие?
Get-EventSubscriber | Unregister-Event
$fsw = New-Object System.IO.FileSystemWatcher
$fsw.Path = 'c:\ftptest'
$fsw.Filter = '*.*'
$fsw.EnableRaisingEvents = $true
$fsw.IncludeSubdirectories = $true
$fsw.NotifyFilter = [IO.NotifyFilters]::LastWrite
$null = Register-ObjectEvent -InputObject $fsw -EventName Changed -SourceIdentifier MonitorFiles
while ($true)
{
$evt = Wait-Event -SourceIdentifier MonitorFiles
Write-Host "Changed: $($evt.SourceEventArgs.FullPath)"
$evt | Remove-Event
}
Когда я редактирую файл и сохраняю его, он выводит измененный файл дважды. Изменено: c:\ftptest\Test1.txt Изменено: c:\ftptest\Test1.txt
Хорошо, я изменил код на этот, который, кажется, помогает - своего рода триггер, если хотите...
Get-EventSubscriber | Unregister-Event
$fsw = New-Object System.IO.FileSystemWatcher
$fsw.Path = 'c:\ftptest'
$fsw.Filter = '*.*'
$fsw.EnableRaisingEvents = $true
$fsw.IncludeSubdirectories = $true
$fsw.NotifyFilter = [IO.NotifyFilters]::LastWrite
$null = Register-ObjectEvent -InputObject $fsw -EventName Changed -SourceIdentifier MonitorFiles
$Buffer = ""
while ($true)
{
$evt = Wait-Event -SourceIdentifier MonitorFiles
if ($Buffer -eq "Changed: $($evt.SourceEventArgs.FullPath)") {
$Buffer = ""
} Else {
$Buffer = "Changed: $($evt.SourceEventArgs.FullPath)"
}
Write-Host $Buffer.ToString()
$evt | Remove-Event
}