PowerShell ve FileSystemWatcher ile Klasör İzleme ve Otomasyon

PowerShell kullanarak belirli bir dizindeki dosya değişikliklerini gerçek zamanlı izleyin. .NET FileSystemWatcher sınıfı ile olay tabanlı otomasyon süreçleri oluşturun.

W
WOSHUB (Windows OS Hub)
4 görüntülenme
PowerShell ve FileSystemWatcher ile Klasör İzleme ve Otomasyon

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

  1. İzlenecek klasör yolunu ve izleme kriterlerini belirleyin.
  2. System.IO.FileSystemWatcher nesnesini oluşturun.
  3. Olay türlerini (Created, Changed, Deleted, Renamed) tanımlayın.
  4. Register-ObjectEvent ile 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.