Как легко отслеживать изменения в папке 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 больше не будет занят.

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40