Benutzer mit den meisten Antworten
Hilfe bei Dateiüberwachung benötigt!!

Frage
-
Hallo zusammen,
ich bräuchte mal eure Hilfe,
und zwar versuche ich gerade festzustellen, wann Änderungen an mehreren Datei gemacht wurden.
Ich habe ein Script gefunden, welches genau die Aufgabe übernimmt, die ich benötige:
cls #Unregister-Event -SourceIdentifier * $global:Path = Resolve-Path("C:\Users\Mitsch\Desktop\soltec\Daten\“) $Folder = (Split-Path $Path) $Filter = "*.dat" $FSW = new-object system.io.filesystemwatcher # FileSystemWatcher erstellen $FSW.Path = $Folder # zu überwachendes Verzeichnis übergeben $FSW.IncludeSubdirectories = $True # Unterverzeichnisse einschließen? $FSW.Filter = $Filter # Filter für die Überwachung… function global:out_Text($txt) { Write-Host (“{0}” -f $txt) } $OnCreate = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated out_Text ($text) # Funktion out_Text aufrufen und Ausgabetext übergeben } $OnChange = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated out_Text ($text) # Funktion out_Text aufrufen und Ausgabetext übergeben } $OnRename = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated out_Text ($text) # Funktion out_Text aufrufen und Ausgabetext übergeben } $OnDelete = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated out_Text ($text) # Funktion out_Text aufrufen und Ausgabetext übergeben } Register-ObjectEvent -InputObject $FSW ` -EventName Created -SourceIdentifier FileCreated -Action $OnCreate | Out-Null Register-ObjectEvent -InputObject $FSW ` -EventName Changed -SourceIdentifier FileChanged -Action $OnChange | Out-Null Register-ObjectEvent -InputObject $FSW ` -EventName Renamed -SourceIdentifier FileRenamed -Action $OnRename | Out-Null Register-ObjectEvent -InputObject $FSW ` -EventName Deleted -SourceIdentifier FileDeleted -Action $OnDelete | Out-Null
Jetzt habe ich nur ein Problem:
Wenn ich eine Datei umbenenne, lösche und erstelle funktioniert alles wie es soll:
Es wird EINE Zeile ausgegeben!!!
Wenn ich nun hingegen in einer Datei etwas ändere,
werden ZWEI Zeilen ausgegeben :-(
Weiß zufällig einer wo hier das Problem liegt???
Dann noch eine andere Frage,
für mich ist besonders von Interesse, wenn eine Datei verändert wurde!
Wie kann ich dies nun weiterverarbeiten??
Also wenn festgestellt wurde, dass sich etwas in der Datei geändert hat, möchte ich weitere Aktionen machen...
Vielen Dank im Vorraus
Antworten
-
Am 25.03.2014 schrieb Mitsch86:
Leider kann ich noch keien Screenshots anhängen, da mein Account noch nicht verifiziert wurde.
Du kannst hier deinen Account verifizieren lassen:
http://social.microsoft.com/Forums/en-US/reportabug/thread/9c6dfcc5-2e1c-4998-b25e-42d62bdd4519#9c6dfcc5-2e1c-4998-b25e-42d62bdd4519Während ich den Text geschrieben habe, habe ich das Problem entdeckt:
Es liegt am Editor! Wenn ich nun eine Bilddatei überwache und diese mit Paint verändere funktioniert das ganze, es wird nur ein Change ausgegeben.
Wenn ich nun aber eine Textdatei überwache und diese mit dem Editor verändere und anschließend speicher, bekomm ich 2 Zeilen!Wahrscheinlich wird beim ändern und beim speichern das OnChange
ausgelöst.Noch eine weitere Frage:
mich interessieren 4 spezielle Dateien. Wie schaffe ich es nur diese zu überwachen?
Leider funktioniert mein erster Ansatz mit dem Filter nicht :
$global:Path = Resolve-Path("C:\Users\wiedermm\Desktop\soltec\Daten\“) $Folder = (Split-Path $Path) $Filter = @("nozzle.dat","track.dat","recipe.dat","paramet2.dat") $FSW = new-object system.io.filesystemwatcher # FileSystemWatcher erstellen $FSW.Path = $Folder # zu überwachendes Verzeichnis übergeben $FSW.IncludeSubdirectories = $False # Unterverzeichnisse einschließen?
Den Filter solltest Du pipen, anstatt ein Komma benutzen.
http://www.dacomsys.de/powershell-filesystemwatcher-uberwachung-von-verzeichnissen/
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren- Als Antwort markiert Alex Pitulice Dienstag, 1. April 2014 12:43
-
Hallo,
hier kannst Du naeheres ueber die Klasse FileSystemWatcher erfahren!
Man beachte insbesondere auch diesen Satz:
Beachten Sie, dass ein FileSystemWatcher möglicherweise ein Ereignis verpasst, wenn die Puffergröße überschritten wird. Um das Verpassen von Ereignissen zu vermeiden, folgen Sie diesen Richtlinien...
http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher.aspx
- Bearbeitet brima Dienstag, 25. März 2014 09:40
- Als Antwort markiert Alex Pitulice Dienstag, 1. April 2014 12:43
Alle Antworten
-
Also das mit dem weiterverarbeiten klappt nun...
Jetzt ist nur noch die Frage, warum bei einer Änderung der Datei 2 Zeilen ausgegeben werden???
Oder weiß jemand eine Möglichkeit, wie ich dies abfangen kann?
Da ich gerne bei einer Änderung weitere Schritte ausführen möchte, ist das Problem mit der doppelten Zeile sehr blöd, da die folgenden Schritte sonst doppelt ausgeführt werden würden!
Sorry für solch einfache fragen, ich bin erst am Anfang meiner "Programmierkarriere" ....
-
Am 24.03.2014 schrieb Mitsch86:
Jetzt ist nur noch die Frage, warum bei einer Änderung der Datei 2 Zeilen ausgegeben werden???
Welche genauen Zeilen werden denn ausgegeben? Vermutlich wird OnChange
und OnRename ausgelöst.
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren -
Schonmal vielen Dank für die Antwort!
Bei einer Änderung IN der Datei, wird 2 mal die Zeile OnChange ausgegeben!
Wird die Datei umbennant funktioniert alles: Es wird eine Zeile ausgegeben.
Wird jedoch der Inhalt der Datei verändert, wird der Text 2 mal ausgegeben.
Leider kann ich noch keien Screenshots anhängen, da mein Account noch nicht verifiziert wurde.
Während ich den Text geschrieben habe, habe ich das Problem entdeckt:
Es liegt am Editor! Wenn ich nun eine Bilddatei überwache und diese mit Paint verändere funktioniert das ganze, es wird nur ein Change ausgegeben.
Wenn ich nun aber eine Textdatei überwache und diese mit dem Editor verändere und anschließend speicher, bekomm ich 2 Zeilen!
Noch eine weitere Frage:
mich interessieren 4 spezielle Dateien. Wie schaffe ich es nur diese zu überwachen?
Leider funktioniert mein erster Ansatz mit dem Filter nicht :
$global:Path = Resolve-Path("C:\Users\wiedermm\Desktop\soltec\Daten\“) $Folder = (Split-Path $Path) $Filter = @("nozzle.dat","track.dat","recipe.dat","paramet2.dat") $FSW = new-object system.io.filesystemwatcher # FileSystemWatcher erstellen $FSW.Path = $Folder # zu überwachendes Verzeichnis übergeben $FSW.IncludeSubdirectories = $False # Unterverzeichnisse einschließen?
-
Am 25.03.2014 schrieb Mitsch86:
Leider kann ich noch keien Screenshots anhängen, da mein Account noch nicht verifiziert wurde.
Du kannst hier deinen Account verifizieren lassen:
http://social.microsoft.com/Forums/en-US/reportabug/thread/9c6dfcc5-2e1c-4998-b25e-42d62bdd4519#9c6dfcc5-2e1c-4998-b25e-42d62bdd4519Während ich den Text geschrieben habe, habe ich das Problem entdeckt:
Es liegt am Editor! Wenn ich nun eine Bilddatei überwache und diese mit Paint verändere funktioniert das ganze, es wird nur ein Change ausgegeben.
Wenn ich nun aber eine Textdatei überwache und diese mit dem Editor verändere und anschließend speicher, bekomm ich 2 Zeilen!Wahrscheinlich wird beim ändern und beim speichern das OnChange
ausgelöst.Noch eine weitere Frage:
mich interessieren 4 spezielle Dateien. Wie schaffe ich es nur diese zu überwachen?
Leider funktioniert mein erster Ansatz mit dem Filter nicht :
$global:Path = Resolve-Path("C:\Users\wiedermm\Desktop\soltec\Daten\“) $Folder = (Split-Path $Path) $Filter = @("nozzle.dat","track.dat","recipe.dat","paramet2.dat") $FSW = new-object system.io.filesystemwatcher # FileSystemWatcher erstellen $FSW.Path = $Folder # zu überwachendes Verzeichnis übergeben $FSW.IncludeSubdirectories = $False # Unterverzeichnisse einschließen?
Den Filter solltest Du pipen, anstatt ein Komma benutzen.
http://www.dacomsys.de/powershell-filesystemwatcher-uberwachung-von-verzeichnissen/
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren- Als Antwort markiert Alex Pitulice Dienstag, 1. April 2014 12:43
-
Hallo,
hier kannst Du naeheres ueber die Klasse FileSystemWatcher erfahren!
Man beachte insbesondere auch diesen Satz:
Beachten Sie, dass ein FileSystemWatcher möglicherweise ein Ereignis verpasst, wenn die Puffergröße überschritten wird. Um das Verpassen von Ereignissen zu vermeiden, folgen Sie diesen Richtlinien...
http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher.aspx
- Bearbeitet brima Dienstag, 25. März 2014 09:40
- Als Antwort markiert Alex Pitulice Dienstag, 1. April 2014 12:43
-
Erstmal Danke für die Antworten!!!!
So und nun gehts :-)
Was bedeutet pipen?
Ich wäre euch wirklich dankbar wenn mir einer kurz auf die Sprünge helfen könnte...
Wie gesagt, bin noch am lernen....
Das möglicherweiße ein Ereignis verpasst werden kann habe ich schon gelesen!
Ich wäre euch dankbar, wenn mir einer einen kleinen Ansatz schicken kann, wie ich GENAU DIESE Dateien überwachen kann.
Stehe auf dem Schlauch :-(
MfG
-
Am 25.03.2014 schrieb Mitsch86:
Erstmal Danke für die Antworten!!!!
So und nun gehts :-)Freut mich für dich und Danke für die Rückmeldung. ;)
Zeig uns doch noch dein fertiges Script, dann haben spätere Leser auch
was davon.Was bedeutet pipen?
Ich wäre euch wirklich dankbar wenn mir einer kurz auf die Sprünge helfen könnte...
Wie gesagt, bin noch am lernen....Du mußt lernen die Hilfe zu lesen. Und der Hersteller der SW, in
diesem Fall MSFT sollte die erste Anlaufstelle sein. Im Technet ist
sehr viel dazu zu finden.Ich wäre euch dankbar, wenn mir einer einen kleinen Ansatz schicken kann, wie ich GENAU DIESE Dateien überwachen kann.
Ich persönlich würde mir eine EXE in Visual Studio 2010 erstellen,
aber das ist Geschmackssache.
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren -
Hallo,
leider habe ich mich vorhin verschrieben...
Ich wollte sagen und jetzt geht es los... :-) und nicht jetzt geht es!!!! Sorry!
Also die Hilfe habe ich mir durchgelesen und habe es per Pipes versucht, leider wieder ohne erfolg :-(
Ich würde es trotzdem gerne irgendwie mit Powershell lösen, da ich mich hier weiterbilden möchte!
Leider finde ich im Netz kein Beispiel, indem explizit 2 oder mehr Dateien zur Überwachung angegeben werden.
Wäre wirklich nett wenn ihr mir nochmals helfen könntet!!!
-
Was ich nun im Netz gelesen habe ist, dass ich mit einem filesystemwatcher nur einen Ordner (+Unterordner) überprüfen kann. Wenn ich es richtig verstanden habe, kann ich keine unabhängigen Ordner mit einem filesystemwatcher überprüfen. Ich muss diesen mehrfach aufrufen....
Dann versuch ich mal mein Glück, für Hilfe bin ich immer noch zu haben :-)
-
Hier der Code mit dem ich mehrere Dateien in Unterschiedlichen (keine Unterverzeichnisse) Ordnern überwachen kann!
Ich bin für jede Verbesserung offen....
cls Unregister-Event -SourceIdentifier * $global:testfile = @("C:\Patha\file1.txt","C:\Pathb\file2.txt") function global:out_Text($txt) { Write-Host (“{0}” -f $txt) } $OnCreate = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated.DateTime out_Text ($text) } $OnChange = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated.DateTime out_Text ($text) } $OnRename = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated.DateTime out_Text ($text) } $OnDelete = { $text = “Ereignis: [{0}] in {1} : {2:d}” –f $eventArgs.ChangeType, $eventArgs.FullPath, $Event.TimeGenerated.DateTime out_Text ($text) } $cnt = 1 foreach ($nameoftestfile in $testfile) { $path = (Split-Path $nameoftestfile) $filter = (Split-Path $nameoftestfile -leaf) $watchername = '$FSW' + $cnt $watchername = new-object system.io.filesystemwatcher $watchername.Path = $path $watchername.IncludeSubdirectories = $False $watchername.Filter = $filter $watchername.EnableRaisingEvents = $True #$watchername.NotifyFilter = "LastWrite" Register-ObjectEvent -InputObject $watchername -EventName Created -Action $OnCreate | Out-Null Register-ObjectEvent -InputObject $watchername -EventName Changed -Action $OnChange | Out-Null Register-ObjectEvent -InputObject $watchername -EventName Renamed -Action $OnRename | Out-Null Register-ObjectEvent -InputObject $watchername -EventName Deleted -Action $OnDelete | Out-Null ++$cnt; }
-
Ich schon wieder :-) Sorry fürs Nerven!!!
Mit oben stehendem Code bekomm ich follgende Ausgabe:
Wie ist es möglich, die Ereignisse die Gleichzeitig passieren, als ein Ereignis darzustellen.
Ich würde gerne irgendwie alle Änderungen die in einem gewissen Zeitraum geschehen als eine deuten.
Denn Inhalt aller Änderungen möchte ich trotzdem anzeigen, auch wenn sie gleichzeitig geschehen sind.
Also in etwa so:
Schonmal vielen Dank