Ich versuche, ein Verzeichnis für die Erstellung von Dateien zu überwachen. Wenn eine Datei erstellt wird, möchte ich eine einzelne Zeile in eine Protokolldatei schreiben und den Ordner weiter überwachen. Ich verwende diesen Code unten, aber ich bekomme einen doppelten Eintrag in der Protokolldatei.Usinf System.IO.FileSystemWatcher zum Schreiben in eine Protokolldatei, wenn eine Datei erstellt wird
Wenn ich Pausen in die $action
setzen, kann ich sehen, dass es zweimal durchläuft, bevor ich auf das nächste Ereignis warte, weshalb es zwei Zeilen in die Protokolldatei schreibt.
Was habe ich falsch gemacht?
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\test-folder"
$watcher.Filter = "*FINAL*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$watcher.InternalBufferSize = 16384
### DEFINE ACTIONS AFTER A EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $path"
Add-Content "C:\test-folder\created.log" -value $logline
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY
$created = Register-ObjectEvent $watcher "Created" -Action $action
# $changed = Register-ObjectEvent $watcher "Changed" -Action $action
# $deleted = Register-ObjectEvent $watcher "Deleted" -Action $action
# $renamed = Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 5}
Protokolldatei sieht wie folgt aus ...
05/03/2016 11:25:16, Created, C:\test-folder\test1-FINAL-.txt 05/03/2016 11:25:16, Created, C:\test-folder\test1-FINAL-.txt 05/03/2016 11:26:10, Created, C:\test-folder\test2-FINAL-.txt 05/03/2016 11:26:10, Created, C:\test-folder\test2-FINAL-.txt
Sieht OK für mich aus. Bist du sicher, dass du den Beobachter nicht zweimal registriert hast? –
ähm, weiß nicht - wenn ich die ps-Shell schließe und wieder öffne, sollte das irgendwelche Beobachter löschen? - und wenn ich es mit "write and read host" als Pausen in der $ action {ich kann es durch Schleife zweimal sehen. ... – grizlyadams