Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ordner-Überwachung per Skript

Frage Entwicklung Batch & Shell

Mitglied: goodbytes

goodbytes (Level 2) - Jetzt verbinden

09.05.2008, aktualisiert 18.10.2012, 12250 Aufrufe, 11 Kommentare

Hallo,
hat jemand zufällig eine schnelle Lösung per vbs oder Batch parat, mit der ich überwachen kann, dass bestimmte Dateitypen nicht länger als eine maximale Zeit (z.B. 15 Minuten) in einem Ordner liegen bleiben. (Ist der temporäre Ordner eines POP3-Connectors, in dem die *.msg-Dateien kurz landen. Wenn sie länger darin liegen bleiben stimmt etwas nicht. Hier geht`s aber um Fristen.)

Torsten


[Edit Biber] 14.5.2008
Der Beitrag ist mittlerweile "fertig" und als gelöst markiert.
So, wie er sich entwickelt hat, verschiebe ich ihn mal von "Betriebssysteme" mach "Batch & Shell" zu den anderen Skripting-Lösungen und ändere den Titel in "Ordner-Überwachung per Skript".
[/Edit]
Mitglied: Superschaf
09.05.2008 um 08:09 Uhr
Es gibt seit Server 2003 R2 eine Dateiserver-Funktion, da kannst du Dateitypen verbieten.
Bitte warten ..
Mitglied: Iwan
09.05.2008 um 08:44 Uhr
lese Beitrag -> denke drüber nach -> if FrageVerstanden = True then Antworten Else: Close

Torsten möchte nicht wissen, wie man Dateitypen verbietet, sondern wie man einen Ordner überwacht

@Torsten
welcher Pop3-Connector ist es denn? hat der vielleicht noch zusätzliuche Funktionen, die man zur Überwachung nutzen könnte?
Bitte warten ..
Mitglied: goodbytes
09.05.2008 um 10:18 Uhr
Hallo,
richtig, um das Verbieten bestimmter Dateitypen ging`s nun wirklich nicht.
Ich nutze "POPcon" (www.popcon.de). Leider habe ich da keine Möglichkeiten zu sowas.
Hab auch noch mal in meinem Batch/Script-Ordner gekramt und bin tatsächlich auf was gestossen.
In diesem Fall hatte ich alle 15min (mittels Taskplaner) einen Ordner überwacht, ob neue Dateien

Anfang !!!

' Ordnerüberwachung:

' Art der verwendeten Logbucheinträge, 0 = Success, 1 = Error, 2 = Warning, 4 = Information
NEWEVENT = 1
DELEVENT = 2

' Verzeichnis, in dem die Dateien protokolliert werden sollen
LOGDIR = "C:\Programme\POPcon\"
' Dateien, die gesucht werden sollen
FILEMASK = "*.msg"

' Art der verwendeten Logbucheinträge, 0 = Success, 1 = Error, 2 = Warning, 4 = Information
NEWEVENT = 1
DELEVENT = 2

' Diese temporäre Datei wird für den Vergleich benötigt. Das Script muss im verwendeten Verzeichnis Schreibrechte haben.
DIRFILE = "C:\Programme\POPcon\Log.txt"

' NewDel = 1: Alle Unterschiede protokollieren
' NewDel = 0: Nur neu hinzugekommene Dateien protokollieren
NewDel = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

'Alte Liste aus DIRFILE in Array Zeile0() einlesen
If objFSO.FileExists(DIRFILE) Then 'DIRFILE vorhanden
Set objDirFile = objFSO.OpenTextFile(DIRFILE, 1)
If Not objDirFile.AtEndOfStream Then 'DIRFILE nicht leer
strZeile0 = objDirFile.ReadAll
Zeile0 = Split(strZeile0, vbCrLF)
Else
Zeile0 = Array("")
End If 'DIRFILE nicht leer
Else
Zeile0 = Array("")
End If 'DIRFILE vorhanden

' Alle Err-Dateien aus dem Ordner sortiert in das Array Zeile1() einlesen
strCMD = objShell.ExpandEnvironmentStrings("%ComSpec%") & " /c dir " & LOGDIR & "\" & FILEMASK & " /b /od /a-d 2>nul"
strZeile1 = objShell.Exec(strCMD).StdOut.ReadAll
Zeile1 = Split(strZeile1, vbCrLF)

' Am Ende der Ausführung aktuelle Dateiliste in DIRFILE speichern
objFSO.OpenTextFile(DIRFILE, 2, True).Write strZeile1

' *
' Dateivergleich zwischen Content.txt (Zeile0) und aktueller Liste (Zeile1)
' *

If LCase(Trim(strZeile0)) <> LCase(Trim(strZeile1)) Then 'Dateiliste hat sich verändert

' Hinzugekommene Dateien in "Hinzu1" schreiben
Hinzu1 = ""
For i = 0 To UBound(Zeile1)
Hinzu = Filter(Zeile0, Zeile1(i), True)
If UBound(Hinzu) = -1 Then Hinzu1 = Hinzu1 & vbCrLF & Zeile1(i)
Next

If Hinzu1 <> "" Then 'Es sind Dateien hinzugekommen
' Event für hinzugekommene Dateien in das Logbuch schreiben
EventStr = "Neu hinzugekommene Dateien vom Typ " & FILEMASK & " :"
EventStr = EventStr & Hinzu1
' objShell.LogEvent NEWEVENT, EventStr
'WScript.Echo("EventHinzu: " & EventStr & vbCrLF) 'zu Demozwecken Ausgabe anstatt Event-Eintrag
Set WSHShell = WScript.CreateObject("WScript.Shell") 'Batch-Datei an Eingabeaufforderung übergeben
WSHShell.Run("cmd.exe /c Batch.cmd"), 0, True
End If 'Es sind Dateien hinzugekommen

Else
'WScript.Echo "Keine Unterschiede gefunden!" 'Ausgabe zu Demozwecken
End If

Ende !!!

Nun müsste ich es noch so umstricken, dass bei einer Übereinstimmung mindestens eines Dateinamens das Ereignis ausgelöst wird.
Naja, mal sehen.

Torsten
Bitte warten ..
Mitglied: bastla
09.05.2008 um 15:20 Uhr
Hallo TorstenB!

Versuch es damit:
01.
' Ordnerüberwachung: 
02.
 
03.
' Verzeichnis, in dem die Dateien protokolliert werden sollen 
04.
LOGDIR = "C:\Programme\POPcon\" 
05.
' Dateien, die gesucht werden sollen 
06.
FILEMASK = "*.msg" 
07.
' Diese temporäre Datei wird für den Vergleich benötigt. Das Script muss im verwendeten Verzeichnis Schreibrechte haben. 
08.
DIRFILE = "C:\Programme\POPcon\Log.txt" 
09.
'Diesen Batch ausführen, wenn mindesten eine alte Datei gefunden wird 
10.
BATCH = "C:\Batch.cmd" 
11.
 
12.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
13.
Set objShell = CreateObject("WScript.Shell") 
14.
 
15.
'Alte Liste aus DIRFILE in Array Zeile0() einlesen 
16.
If objFSO.FileExists(DIRFILE) Then 'DIRFILE vorhanden 
17.
	Set objDirFile = objFSO.OpenTextFile(DIRFILE, 1) 
18.
	If Not objDirFile.AtEndOfStream Then 'DIRFILE nicht leer 
19.
		strZeile0 = objDirFile.ReadAll 
20.
	Else 
21.
		strZeile0 = "" 
22.
	End If 'DIRFILE nicht leer 
23.
Else 
24.
	strZeile0 = "" 
25.
End If 'DIRFILE vorhanden 
26.
 
27.
' Alle Dateien aus dem Ordner sortiert in das Array Zeile1() einlesen 
28.
strCMD = objShell.ExpandEnvironmentStrings("%ComSpec%") & " /c dir " & LOGDIR & "\" & FILEMASK & " /b /od /a-d 2>nul" 
29.
strZeile1 = objShell.Exec(strCMD).StdOut.ReadAll 
30.
Zeile1 = Split(strZeile1, vbCrLF) 
31.
 
32.
' Am Ende der Ausführung aktuelle Dateiliste in DIRFILE speichern 
33.
objFSO.OpenTextFile(DIRFILE, 2, True).Write strZeile1 
34.
 
35.
' * 
36.
' Dateivergleich zwischen Content.txt (Zeile0) und aktueller Liste (Zeile1) 
37.
' * 
38.
 
39.
If LCase(Trim(strZeile0)) <> LCase(Trim(strZeile1)) Then 'Dateiliste hat sich verändert 
40.
	strZeile0 = vbCrLF & strZeile0 'jeder Eintrag ist jetzt von vbCrLF umgeben und kann entsprechend gesucht werden 
41.
	For i = 0 To UBound(Zeile1) 
42.
		If InStr(1, strZeile0, vbCrLF & Zeile1(i) & vbCrLF, vbTextCompare) Then 
43.
			'noch vorhanden 
44.
			'Batch-Datei an Eingabeaufforderung übergeben 
45.
			objShell.Run "cmd.exe /c " & BATCH , 0, True 
46.
			'weitere Überprüfung nicht erforderlich 
47.
			Exit For 
48.
		End If 
49.
	Next 
50.
Else 'Dateiliste unverändert 
51.
	'Batch-Datei an Eingabeaufforderung übergeben 
52.
	objShell.Run "cmd.exe /c " & BATCH , 0, True 
53.
End If
Den Pfad für die auszuführende Batchdatei habe ich aus Gründen der Übersichtlichkeit ebenfalls (am Anfang des Scripts) einer Variablen zugewiesen.

Grüße
bastla

P.S.: Wenn Du das nächste Mal ein Script postest, bitte anstelle von "Anfang !!!" und "Ende !!!" < code> und < /code> (natürlich ohne Leerzeichen) verwenden ...
Bitte warten ..
Mitglied: goodbytes
13.05.2008 um 09:53 Uhr
Hallo bastla,
ich hab`s mal ausprobiert. Der Ordnerinhalt wird auch sauber in die Logdatei geschrieben. Allerdings schlägt offenbar der Vergleich fehl.
Die Testdatei habe ich drin liegen gelassen. Beim zweiten Aufruf des Scripts hätte der Vergleich eigentlich positiv ausfallen müssen und die Batch ausgeführt werden müssen.
Ging aber nicht. Woran könnte das noch liegen?

Torsten
Bitte warten ..
Mitglied: bastla
13.05.2008 um 10:25 Uhr
Hallo TorstenB!

Füge testweise die Zeilen
01.
WScript.Echo "Alt (" & Len(Trim(strZeile0)) & "): " & vbCrLF & strZeile0 
02.
WScript.Echo "Neu (" & Len(Trim(strZeile1)) & "): " & vbCrLF & strZeile1
vor "If LCase ..." ein und starte das Script von der Kommandozeile mit
01.
cscript //nologo "PfadZuDeinemScript"
Die Zahl nach "Alt" bzw "Neu" gibt die Zeichenanzahl der beiden Inhaltsverzeichnisse an und sollte bei zweimaligem Durchlauf den selben Wert haben; ebenso müssten die angezeigten Dateilisten übereinstimmen.

Zusätzlich kannst Du noch den Batchstart mit folgender Zeile (jeweils unmittelbar vor "objShell.Run..." platzieren) dokumentieren:
01.
WScript.Echo "Starte """ & BATCH & """"
Grüße
bastla
Bitte warten ..
Mitglied: goodbytes
13.05.2008 um 12:48 Uhr
Hallo bastla,
mmm, nun es wurde sauber angezeigt und hat auch funktioniert.
Ich habe ja mittlerweile hin- und herprobiert; offenbar hatte ich irgendwo einen Tippfehler drin.
So ist es also auf jeden Fall lauffähig.
Eine Frage hab ich da noch. Im Normalfall sollte sich ja immer keine msg-Datei darin befinden, nur ganz kurz mal. In den meisten Fällen wird in der Logdatei immer nichts stehen. Wie kann ich nun noch abfangen, dass die Batch gestartet wird wenn bei zwei Aufrufen beides Mal die Logdatei leer ist? In diesem Fall startet momentan ja auch die Batch, da der Inhalt der Logdatei identisch ist.

Torsten
Bitte warten ..
Mitglied: bastla
13.05.2008 um 13:25 Uhr
Hallo TorstenB!

Einfach in den letzten Teil noch eine Abfrage rein:
01.
Else 'Dateiliste unverändert 
02.
	'Batch-Datei an Eingabeaufforderung übergeben 
03.
	If Trim(strZeile1) <> "" Then objShell.Run "cmd.exe /c " & BATCH , 0, True 
04.
End If
Alternativ dazu könntest Du auch schon vor dem If LCase ... mit
01.
If Trim(strZeile1) = "" Then WScript.Quit
bei aktuell leerem Ordner gleich das Script beenden.

Grüß
bastla
Bitte warten ..
Mitglied: goodbytes
13.05.2008 um 14:34 Uhr
Hallo bastla,
klappt prima; ich hab mich für die zweite Variante entschieden, da das Script ja nicht unnötig weiter ablaufen muss wenn der Ordner ohnehin leer ist.

Vielen Dank für die schnelle Hilfe !!!

Torsten
Bitte warten ..
Mitglied: bastla
13.05.2008, aktualisiert 18.10.2012
Hallo TorstenB!

Vielleicht könntest Du dann noch Deinen hier geposteten Parallelbeitrag in einen Hinweis auf diesen Thread verwandeln ...

Grüße
bastla
Bitte warten ..
Mitglied: goodbytes
14.05.2008 um 07:19 Uhr
Alles klar, hab ich gemacht.

Torsten
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...