Giriş
Sistem yöneticileri ve otomasyon uzmanları, belirli bir dizindeki dosya oluşturma, silme, değiştirme veya yeniden adlandırma işlemlerini takip etme ihtiyacı duyarlar. Windows'un klasik dosya denetim (auditing) özellikleri yerine, .NET Framework'ün bir parçası olan FileSystemWatcher sınıfını kullanarak PowerShell üzerinden hafif ve esnek bir izleme mekanizması kurabilirsiniz.
Sorun
Bir klasördeki dosya hareketlerini gerçek zamanlı olarak takip etmek ve bu hareketlere bağlı olarak otomatik bir işlem (script çalıştırma, loglama, dosya taşıma vb.) tetiklemek istiyorsunuz. Geleneksel denetim günlükleri çok fazla gürültü yaratabilir ve işlenmesi zordur.
Çözüm: FileSystemWatcher Kullanımı
FileSystemWatcher, dosya sistemi olaylarını izlemek için kullanılan bir .NET sınıfıdır. PowerShell içerisinde bu sınıfı örneklendirerek, belirli bir dizine 'watcher' (izleyici) atayabilir ve olay gerçekleştiğinde çalışacak bir 'Action' bloğu tanımlayabilirsiniz.
Adım Adım Uygulama
- İzlenecek klasör yolunu ve izleme kriterlerini belirleyin.
System.IO.FileSystemWatchernesnesini oluşturun.- Olay türlerini (Created, Changed, Deleted, Renamed) tanımlayın.
Register-ObjectEventile bir olay aboneliği oluşturun.
$folder = "C:\MonitorFolder"
$filter = "*.*"
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $folder
$watcher.Filter = $filter
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$action = {
$path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "$timeStamp - Dosya $changeType: $path" -ForegroundColor Green
}
Register-ObjectEvent $watcher "Created" -Action $action
İpucu: İzleyiciyi durdurmak için Unregister-Event komutunu kullanmayı unutmayın. Aksi takdirde PowerShell oturumu açık kaldığı sürece arka planda çalışmaya devam edecektir.
Dikkat Edilmesi Gerekenler
Bu yöntem geçici bir izleme sağlar. Eğer sunucu yeniden başlatıldığında izlemenin devam etmesini istiyorsanız, script'i bir Windows Servisi olarak veya 'Scheduled Task' ile başlangıçta çalışacak şekilde yapılandırmanız gerekir.
Ayrıca, çok yüksek dosya trafiği olan dizinlerde (örneğin binlerce dosyanın saniyeler içinde değiştiği yerlerde) FileSystemWatcher olayları kaçırabilir. Bu durumda daha gelişmiş izleme araçları tercih edilmelidir.



