Dateien überwachen
Batch Datei ?
Hallo zusammen,
ich habe das Problem in unserem Netzwerk, das manche Dateien (Excle Mappen oder PDFs usw.) einfach gelöscht sind, und niemand will es gewesen sein, somit kann ich mindestens 3 mal täglich die Dateien über die Datensicherung wiederherstellen.
Nun habe ich mir ein altes Notebook (Windows XP SP2) eingerichtet und im Serverraum platziert. Jetz wollte ich gerne ein komplettes Netzlaufwerk "überwachen". Ich benötige hier kein riesen Tool oder so (hab auch schon manche getestet) sondern quasi bloß ein Logfile, das dann geschrieben wird, sobald sich eine Datei in diesem Verzeichnis ändert (also umbenannt, gelöscht, verschoben) wird.
Im Logfile sollte lediglich der Dateiname, Benutzername, Datum angezeigt werden.
Windows bringt zwar ein eigenes Tool mit, aber das funzt bei uns nicht so toll (liegt auch unter anderem an unseren Server 2000).
Kennt jemand ein Batch Script, das dies bewerkstelligen kann?
Alternativ könnte ich das Notebook auch mit Linux ausstatten, falls es dort besser funktionieren sollte...
Bin für jeden Tip dankbar.
Grüße
Hoffi
Hallo zusammen,
ich habe das Problem in unserem Netzwerk, das manche Dateien (Excle Mappen oder PDFs usw.) einfach gelöscht sind, und niemand will es gewesen sein, somit kann ich mindestens 3 mal täglich die Dateien über die Datensicherung wiederherstellen.
Nun habe ich mir ein altes Notebook (Windows XP SP2) eingerichtet und im Serverraum platziert. Jetz wollte ich gerne ein komplettes Netzlaufwerk "überwachen". Ich benötige hier kein riesen Tool oder so (hab auch schon manche getestet) sondern quasi bloß ein Logfile, das dann geschrieben wird, sobald sich eine Datei in diesem Verzeichnis ändert (also umbenannt, gelöscht, verschoben) wird.
Im Logfile sollte lediglich der Dateiname, Benutzername, Datum angezeigt werden.
Windows bringt zwar ein eigenes Tool mit, aber das funzt bei uns nicht so toll (liegt auch unter anderem an unseren Server 2000).
Kennt jemand ein Batch Script, das dies bewerkstelligen kann?
Alternativ könnte ich das Notebook auch mit Linux ausstatten, falls es dort besser funktionieren sollte...
Bin für jeden Tip dankbar.
Grüße
Hoffi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 68591
Url: https://administrator.de/forum/dateien-ueberwachen-68591.html
Ausgedruckt am: 24.12.2024 um 00:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo Hoffi,
da ich das gleiche Problem habe (Überwachung eines Ordners mit einfachsten Bordmitteln), habe ich mich mal an die Umsetzung in VBScript gemacht. Das folgende Skript kann in einem beliebigen Scheduler in entsprechend sinnvollen Abständen ausgeführt werden und sollte mit allen Windows-Versionen, die VBScript unterstützen, funktionieren. Das Skript generiert am Ende jeweils einen Alert für alle hinzugekommenen und einen für alle gelöschten Dateien seit dem letzten Aufruf. Der Benutzerkontext, unter dem das Skript ausgeführt wird, benötigt lediglich Schreibrechte auf C:\WINDOWS\Debug.
Gruß
Christian
da ich das gleiche Problem habe (Überwachung eines Ordners mit einfachsten Bordmitteln), habe ich mich mal an die Umsetzung in VBScript gemacht. Das folgende Skript kann in einem beliebigen Scheduler in entsprechend sinnvollen Abständen ausgeführt werden und sollte mit allen Windows-Versionen, die VBScript unterstützen, funktionieren. Das Skript generiert am Ende jeweils einen Alert für alle hinzugekommenen und einen für alle gelöschten Dateien seit dem letzten Aufruf. Der Benutzerkontext, unter dem das Skript ausgeführt wird, benötigt lediglich Schreibrechte auf C:\WINDOWS\Debug.
Gruß
Christian
' Dateiüberwachung in einem Verzeichnis
' *************************************
' V1.0 02.Nov.2007
' Letzte Änderung: 02.Nov.2007
'
' Autor: Christian Coppes
' kann in SCOM oder anderen Schedulern (z.B. "Geplante Tasks") zur Überwachung von Verzeichnissen eingesetzt werden
'
' Die Datei muß mit irgendeiner Art von Scheduler in regelmäßigen Abständen aufgerufen werden.
' Je nach Größe des Zielverzeichnisses sollte man die Zeit nicht zu kurz wählen, damit das Skript nicht
' läuft, während eine alte Instanz noch nicht fertig ist.
' Es empfiehlt sich, einen Wert von ca. 1 Minute nicht zu unterschreiten.
' Mit den Konstanten unten kann man die Parameter an eigene Bedürfnisse anpassen.
'
' Funktionsweise: Per CMD-"dir"-Befehl wird der Inhalt des gewünschten Verzeichnisses
' unter Verwendung von FILEMASK abwechselnd in die Datei DIRFILE0 und DIRFILE1 eingetragen.
'
' Zur Feststellung, welche Datei zuletzt verwendet wurde, dient die Datei SWITCHFILE0, die dann
' abwechselnd in SWITCHFILE1 umbenannt wird.
'
' Es wird daraufhin festgestellt, welche die neuere DIRFILE ist, um die Änderung gegenüber der älteren
' zu protokollieren.
'
' Die beiden DIRFILEs werden in jeweils ein Array eingelesen, die ältere Datei immer in "Zeile0",
' die neuere immer in "Zeile1".
'
' Mit Hilfe des VBScript-Filter-Befehls wird dann Zeile für Zeile verglichen, welche Zeile in der älteren
' Datei nicht vorhanden ist und diese in das Array "Hinzu1" eingefügt. Umgekehrt wird dann der Vergleich
' durchgeführt, um Zeilen, die in der neueren Datei nicht mehr enthalten sind, in "Weg1" zu schreiben.
'
' Zuletzt wird für beide Gruppen je ein Event im Application Event Log angelegt. Über die Konstanten kann
' man festlegen, ob auch die entfernten Dateien protokolliert werden und welche Art von Event dabei
' generiert werden soll.
'
' Darüber hinaus wird nur ein Event generiert für alle hinzugekommenen und ein Event für alle gelöschten
' Dateien, um die Anzahl der Events nicht zu groß werden zu lassen.
'
' Die Events können dann beispielsweise mit SCOM (Microsoft System Center Operations Manager) ausgewertet werden.
'
' Folgende DOS-Batchdatei prüft ebenfalls auf Dateiunterschiede.
' Dies ist die VBS-Version, die ein wenig komfortabler ist.
'
'@echo off
'if not exist Switch1.txt (if not exist Switch0.txt (echo 1 >Switch0.txt))
'if exist Switch0.txt (set DirFile=Content0.txt) else (set DirFile=Content1.txt)
'dir Logs /b /o /a-d err*.log 1>%DirFile% 2>Null
'if exist Content0.txt (if exist Content1.txt (fc Content0.txt Content1.txt >Unterschied.log))
'if exist Switch1.txt (ren Switch1.txt Switch0.txt) else (ren Switch0.txt Switch1.txt)
'echo On
' Verzeichnis (absolut oder relativ zum Skriptpfad), in dem die Dateien protokolliert werden sollen
Const LOGDIR = "Z:\Public\Compare\Logs"
' Dateien, die gesucht werden sollen
Const FILEMASK = "err*.log"
' Art der verwendeten Logbucheinträge, 0 = Success, 1 = Error, 2 = Warning, 4 = Information
Const NEWEVENT = 1
Const DELEVENT = 2
' Diese temporären Dateien werden für den Vergleich benötigt.
' Das Script muß in diesen Verzeichnissen Schreibrechte haben.
Const DIRFILE0 = "C:\Windows\Debug\Content0.txt"
Const DIRFILE1 = "C:\Windows\Debug\Content1.txt"
Const SWITCHFILE0 = "C:\Windows\Debug\Switch0.txt"
Const SWITCHFILE1 = "C:\Windows\Debug\Switch1.txt"
' NewDel = 1: Alle Unterschiede protokollieren
' NewDel = 0: Nur neu hinzugekommene Dateien protokollieren
Const NewDel = 1
Dim i, j, EventStr, AnzHinzu, AnzWeg
Dim Datei,SwitchFile, DirFile
Dim objFSO, objShell
Dim Zeile0(), Zeile1()
Dim Hinzu, Hinzu1()
Dim Weg, Weg1()
Dim DummyFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
'
' Wurde schon eine Switchdatei erstellt?
If ((Not objFSO.FileExists(SWITCHFILE0)) And _
(Not objFSO.FileExists(SWITCHFILE1))) Then
' Switch-Datei erzeugen
Set SwitchFile=objFSO.OpenTextFile(SWITCHFILE0,2,true)
SwitchFile.WriteLine "1" ' Dummyinhalt
SwitchFile.Close
End If
' Schalterdatei prüfen und den Dateinamen für das Inhaltsverzeichnis
' entsprechend einstellen (abwechselndes Schreiben)
If objFSO.FileExists(SWITCHFILE0) Then
DirFile=DIRFILE0
Else
DirFile=DIRFILE1
End If
' Alle Err-Dateien aus dem Ordner sortiert in eine der beiden Content-
' Dateien schreiben
objShell.Run("%windir%\system32\cmd.exe /c dir "+ LOGDIR +" /b /o /a-d " + FILEMASK + " 1>"+DirFile+" 2>Null")
' Am Ende der Ausführung Schalter für den nächsten Durchlauf "umlegen"
If objFSO.FileExists(SWITCHFILE0) Then
'Datei umbenennen
objFSO.MoveFile SWITCHFILE0 , SWITCHFILE1
Else
objFSO.MoveFile SWITCHFILE1 , SWITCHFILE0
End If
' *****************************************************
' Dateivergleich zwischen Content0.txt und Content1.txt
' *****************************************************
' In "Zeile0" immer die ältere Datei einlesen und
' in "Zeile1" immer die neuere
If DirFile = DIRFILE0 Then
DirFileAlt = DIRFILE1
DirFileNeu = DIRFILE0
Else
DirFileAlt = DIRFILE0
DirFileNeu = DIRFILE1
End If
'DIRFILE0 zeilenweise lesen
Set DummyFile=objFSO.OpenTextFile(DirFileAlt,1,true)
i=0
Do until DummyFile.AtEndOfStream
ReDim Preserve Zeile0(i)
Zeile0(i)=DummyFile.ReadLine
i=i+1
Loop
DummyFile.Close
Set DummyFile=Nothing
'DIRFILE1 zeilenweise lesen
Set DummyFile=objFSO.OpenTextFile(DirFileNeu,1,true)
i=0
Do until DummyFile.AtEndOfStream
ReDim Preserve Zeile1(i)
Zeile1(i)=DummyFile.ReadLine
i=i+1
Loop
DummyFile.Close
Set DummyFile=Nothing
' Hinzugekommene Dateien in das Array "Hinzu1" schreiben
AnzHinzu=-1
For i = 0 To UBound(Zeile1)
Hinzu = Filter(Zeile0,Zeile1(i),True)
If UBound(Hinzu)=-1 Then
AnzHinzu = AnzHinzu + 1
ReDim Preserve Hinzu1(AnzHinzu)
Hinzu1(AnzHinzu)=Zeile1(i)
End If
Next
' Entfernte Dateien in das Array "Weg1" schreiben
If NewDel = 1 then
AnzWeg=-1
For i = 0 To UBound(Zeile0)
Weg = Filter(Zeile1,Zeile0(i),True)
If UBound(Weg)=-1 Then
AnzWeg = AnzWeg + 1
ReDim Preserve Weg1(AnzWeg)
Weg1(AnzWeg)=Zeile0(i)
End If
Next
End If
If AnzHinzu > -1 Then
' Event für hinzugekommene Dateien in das Logbuch schreiben
EventStr = "Neu hinzugekommene Dateien vom Typ "+FILEMASK+" :" + vbCrLF
EventStr = EventStr + Join(Hinzu1,vbCrLf)
objShell.LogEvent NEWEVENT, EventStr
'WScript.Echo("EventHinzu: "+EventStr)
End If
If NewDel = 1 Then
If AnzWeg > -1 Then
EventStr = "Entfernte Dateien vom Typ "+FILEMASK+" :" + vbCrLF
EventStr = EventStr + Join(Weg1,vbCrLf)
' Event für entfernte Dateien in das Logbuch schreiben
objShell.LogEvent DELEVENT, EventStr
'WScript.Echo("EventWeg: "+EventStr)
End If
End If
Hallo,
ich habe das gleiche Problem mit den verschwundenen Dateien. Ich habe das Script hier zwar noch nicht getestet, aber geht das nicht ein bisschen an der Zielstellung vorbei?
Das Script zeigt das wichtigste doch gar nicht an, nämlich wenn Dateien gelöscht wurden, wer diese gelöscht hat.
Hast Du dafür schon ein Lösung, oder wie machst Du das jetzt?
ich habe das gleiche Problem mit den verschwundenen Dateien. Ich habe das Script hier zwar noch nicht getestet, aber geht das nicht ein bisschen an der Zielstellung vorbei?
Das Script zeigt das wichtigste doch gar nicht an, nämlich wenn Dateien gelöscht wurden, wer diese gelöscht hat.
Hast Du dafür schon ein Lösung, oder wie machst Du das jetzt?
Hallo,
Du kannst nur das überwachen, was auch irgendwo gespeichert wird. Das Script überprüft lediglich, welche Datei hinzugefügt oder gelöscht wurde und das Wann liegt zwischen der jeweiligen Ausführung des Skriptes.
Um festzustellen, wer etwas hinzugefügt oder gelöscht hat, kannst Du höchstens eine Überwachung per NTFS auf den Ordner hinzufügen. Ich habe mit der NTFS-Überwachung aber auch noch nicht gearbeitet und weiß nicht, ob das damit klappt.
Gruß
Christian
Du kannst nur das überwachen, was auch irgendwo gespeichert wird. Das Script überprüft lediglich, welche Datei hinzugefügt oder gelöscht wurde und das Wann liegt zwischen der jeweiligen Ausführung des Skriptes.
Um festzustellen, wer etwas hinzugefügt oder gelöscht hat, kannst Du höchstens eine Überwachung per NTFS auf den Ordner hinzufügen. Ich habe mit der NTFS-Überwachung aber auch noch nicht gearbeitet und weiß nicht, ob das damit klappt.
Gruß
Christian