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

}

0 ответов

Другие вопросы по тегам