Как легко отслеживать изменения в папке Windows

Мониторинг папки на любые изменения может быть очень полезным.

Вы можете настроить его так, чтобы, когда что-либо добавлялось или удалялось в папке, вы могли бы получать уведомления по электронной почте или запись добавлялась в файл журнала, чтобы вы могли иметь историю того, что произошло.

Проблема в том, что в Windows нет этой функции мониторинга, доступной из коробки.

Итак, как мы можем подойти к этому просто и без покупки какого-либо программного обеспечения?

Платформа Windows .NET имеет класс FileSystemWatcher в пространстве имен System.IO, который существует уже много лет.

Если вы программист, вы, вероятно, можете довольно легко создать небольшое приложение, используя этот класс.

Но если нет, то к PowerShell вы также можете обратиться.

Следующий код при запуске отслеживает папку H: Temp и записывает запись при обнаружении любых изменений.

$log = "$homeDesktopLog.txt" $pathtomonitor = "H:temp" $timeout = 1000 $FileSystemWatcher = New-Object System.IO.FileSystemWatcher $pathtomonitor $FileSystemWatcher.IncludeSubdirectories = $true Write-Host "Monitoring content of $PathToMonitor" while ($true) { $change = $FileSystemWatcher.WaitForChanged('All', $timeout) if ($change.TimedOut -eq $false) { # get information about the changes detected Write-Host "Change detected:" $change | Out-Default (Get-Date), $change.ChangeType.ToString(), $change.Name | Out-File $log -Append } else { Write-Host "." -NoNewline } }



Очевидно, что он не идеален и имеет некоторые недостатки.

Например, если я удалю несколько файлов одновременно, обнаруживается только первый.

Это потому, что этот код работает последовательно. когда обнаруживается изменение, он запускает процедуру обработки и пропускает второе изменение, которое происходит сразу после первого.

Вот лучший пример в Idera, который использует тот же маршрут, но использует асинхронный подход, который поддерживает одновременный мониторинг и обработку, поэтому, когда происходит одно изменение, оно не останавливает мониторинг.

Он использует очередь для внутреннего использования, поэтому, когда за очень короткий период времени происходит много изменений, все они будут выстроены в очередь и будут обработаны, когда PowerShell больше не будет занят.

Отправка комментария

0 Комментарии