pazifist
Goto Top

Batch Script zum erkennen einer Datei nach Datum und Übergabe des entsprechenden Dateinamens der aktuellsten Datei neuesten Datums

[Edit] Als Musterlösung hochgestuft von "Beitrag" zu "Tutorial" [/Edit Biber]

Hallo @all Folks,

nachdem ich hier super schnell und super nett gleich einen Lösungsansatz für mein Hauptproblem in einem anderen Forum gefunden habe möchte ich an dieser
Stelle weiter nach der perfekten Detaillösung bohren...

Es geht um folgendes Grundproblem:

Sicherungen, die auf einem W2K und/oder 2K3-Server per ntbackup erstellt werden, geben per eMail keine Benachrichtigung - was echt läßtig sein kann wg. manueller
Überprüfung der Sicherungen.

Der erste mir gegebene Tipp ist: blat.exe - kleiner Console basierender SMTP-Client - recht umfangreiche Konfiguration möglich - prima Tool!

Dieses Tool kann z.B. den Inhalt einer Text-/Logdatei von einem beliebigen Server aus als Body einer eMail an meinen Verwaltungsaccount senden.
Das klappt auch prima - hab ich heute gleich getestet.

Nun mein Problem:
Ich möchte gerne den Inhalt der Logfiles von ntbackup täglich per eMail an meinen Verwaltungsaccount senden. Somit sehe ich gleich in der eMail, ob alle Pfade etc. gesichert
wurden, und der Job korrekt ausgeführt wurde.

ntbackup erstellt aber pro Job eine neue Logdatei. Also z.B. job01.log, job02.log, job03.log - aber immerhin: immer im gleichen Verzeichnis - grins

Ich habe also eine batch-Datei erstellt, die per Taskplaner jede Nacht startet - kann hier aber natürlich nur einen statischen Dateinamen festlegen.
Es wäre nun also prima, wenn ich aus dem statischen Dateinamen eine Variable machen könnte, und diese vorher abfragt, welche Log-Datei im Verzeichnis denn die aktuellste ist.

(Bitte keinen Lösungsansatz mit: Dateiname-0n+1 / denn wenn man dann die Logdateien löscht, beginnt ntbackup wieder mit job01.txt - der Zähler steht dann aber bei n+n...)

Von der aktuellsten Datei benötigt man dann also den aktuellen Dateinamen als Variable - diese steht dann in der Batchdatei - das wäre für mich perfekte Lösung.

Kann mir hierzu jemand einen Tip geben? Wie geht das?

Vielleicht kann man das ja auch gleich in einer einzigen batch-datei abfragen?


...welche Datei (xxx.log) ist die neueste im Verzeichnis xy?
...welchen Dateinamen hat diese Datei?
...Dateiname=VariableX

Dann kommt der Befehl für blat: blat.exe "c:\%SYSTEMROOT%\Logs\VariableX" -to verwaltungsaccount@meinedomain.de


Vielen Dank schon mal dafür, dass ihr o.s. Kauderwelsch gelesen und zu verstehen versucht habt - wenn jetzt noch eine gute Lösung dabei herauskommt
habt ihr sogar die Chance auf 1000x Dank von mir face-wink

Gruß
Der Pazifist

Content-Key: 43102

Url: https://administrator.de/contentid/43102

Printed on: April 24, 2024 at 04:04 o'clock

Member: SlainteMhath
SlainteMhath Oct 26, 2006 at 14:27:16 (UTC)
Goto Top
(Bitte keinen Lösungsansatz mit:
Dateiname-0n+1 / denn wenn man dann die
Logdateien löscht, beginnt ntbackup
wieder mit job01.txt - der Zähler steht
dann aber bei n+n...)
Genau da steht doch schon eine Lösung face-smile

Du brauchst 2 Batches:
(aus dem Kopf hingeschrieben, also sind sicher noch Fehler drin *g*)

Batchlauf.cmd:
SET LogPfad=c:\was\weis\ich
for %i in (%logPfad%\job*.log) do call SendLog.cmd %i
:EOF

SendLog.cmd:
SET LogPfad=c:\was\weis\ich
SET SavePfad=c:\was\weis\ich\gesendet
blat /mit /paar /optionen /body=%LogPfad%\%1
move %LogPfad%\%1 %SavePfad%\%1
:EOF

Im Klartext: Batchlauf.cmd durchläuft alle job*.log dateien im LogPfad und startet dann SendLog.cmd mit dem gefunden Dateinamen.
SendLog.cmd verschickt die Datei dann per blat.exe und verschiebt sie in ein anderes Verzeichnis.
Evtl. noch bissl ERRORLEVELS abprüfen und gut ist's face-smile
Member: bastla
bastla Oct 26, 2006 at 15:02:33 (UTC)
Goto Top
Hallo Pazifist!

Wolltest Du das etwa so:

for /f %%i in ('dir /b /od "%SYSTEMROOT%\Logs\*.log"') do @set Neueste=%%i  
blat.exe "%SYSTEMROOT%\Logs\%Neueste%" -to verwaltungsaccount@meinedomain.de  

HTH
bastla

[Edit] Pfad angepasst [/Edit]
Member: Biber
Biber Oct 31, 2006 at 17:44:16 (UTC)
Goto Top
Moin pazifist,

Nachfrage:
konntest Du denn mit den Ansätzen oben etwas anfangen?
Ist Deine Frage beantwortet oder haben wir Dich eher verwirrt?

So ist der Status dieses Beitrag etwas unklar..

Gruß
Biber
Member: pazifist
pazifist Nov 22, 2006, updated at Oct 18, 2012 at 15:57:28 (UTC)
Goto Top
Hallo @all,

- sorry für die verspätete Rückmeldung - aber ich kam auch erst letzte Woche dazu, die Script-Lösung auf den fünf betroffenen Servern zu implementieren...naja, geht halt aufs Jahresende zu...

Aber selbstverständlich gebe ich eine Rückmeldung über den Status - schließlich macht ein Forum wie dieses dann auch mehr Sinn und die Qualität wird entsprechend angehoben.

Also:
1.) zu SlainteMhath:
Vielen Dank zunächst einmal für den Ansatz.
Prinzipiell geht das, war mir aber dann doch etwas zu umständlich. Vor allem 2 Scripts erscheinen mir als nicht notwendig.

2.) zu bastla
Vielen Dank auch dir für deinen Lösungsansatz, sowie mindestens ein Bienchen und Millionen von *
...wenn man Ahnung von Scripting hat kann das Leben offensichtlich ganz einfach sein, oder?
Sehr genial, sehr genial - zwei Zeilen - kleine Anpassungen an die Server und fertig ist die perfekte eMail-Benachrichtigung der Sicherungsjobs über Windows Backup Tool.

Diese Lösung habe ich also implementiert - und es paßt perfekt!

3.) zu Biber - wie gesagt... die fehlende Zeit...und die zu setzenden Prioritäten...aber heute will ich natürlich meine Schuldigkeit einlösen, und das - zu recht - angeforderte FeedBack geben.

- Danke an ALLE (auch die Info zu blat.exe aus meiner ersten Anfrage an einer anderen Stelle im Forum ( Windows Backup / geplante Tasks - W2k3-Server - ist eine eMail-Benachrichtiung mit irgendwelchen Tricks möglich? ), die mich grundsätzlich auf den richtigen Weg gebracht hat - und Danke für die zwei genialsten Scriptzeilen zur Lösung meines Problems)


*

Ich weiss nicht, ob es Usus ist, eine komplette Zusammenfassung zu geben, was man nun endgültig gemacht hat, aber ich finde es oft in Foren einfacher, einer fasst nochmals alles zusammen, als dass man sich aus den X Beiträgen dann die endgültige Lösung selbst zusammenstückeln muss.

Also Foren-Admins: Wenn mein folgender Beitrag hier fehl plaziert sein sollte oder nicht der standard Form entspricht - einfach wieder rauskicken face-wink





Kommen wir jetzt zu der Aufgabe:

-warum machen wir das eigentlich, und wozu brauchen wir ein Tool, dass den komischen Namen "blat" trägt?

Nach erfolgter Sicherung meiner Server möchte ich gerne eine Bestätigungsmail in meinem Postfach haben, um auf einen Blick sehen zu können, ob der Server "noch da ist", gesichert hat, und ob
die Sicherung erfolgreich abgelaufen ist.

Das kann z.B. ein Veritas, oder sogar der SQL2000/2005, oder mein LiveStateRecorvery-System bereits von Hause aus - aber ein Server der über Windows-Backup-Tool gesichert wird (was übrigens
in den meisten Fällen vollkommen ausreichend ist!) kann halt keine Mails per SMTP absetzen.

Also braucht man eine Möglichkeit, sich eine Mail generieren zu lassen - möglichst mit Infos zum Sicherungsjob.

UND DAS KANN BLAT.EXE HERVORRAGEND.

Blat ist in der Lage, den Inhalt einer Datei in eine eMail zu übertragen und zu versenden.


Kommen wir jetzt zum Teil 1 der Lösung - DAS TOOL BLAT.EXE:

-Download des Tools blat.exe - am besten über www.google.de "+blat +download" eingeben und einen der Links wählen, oder direkt bei www.blat.net die derzeit aktuelle Version 2.6.1 (vom 18.11.06) downloaden.

- falls notwendig entpacken

- ich habe dann auf den betroffenen Servern auf der C-Partition einen Ordner:
"scripts" angelegt, sowie darin einen Unterordner "blat"

- Die downgeloadete blat.exe + dll +lib (und ggf. Unterordner docs - Dokumentationen) habe ich dann in C:\scripts\blat kopiert

- Zunächst muss man dann mal schnell blat.exe mit der eigenen, netzwerkinternen Konfiguration versehen. Diese sieht beim mir so aus, dass sie auf jedem Server der einen Sicherungsjob
über Windows-Backup-Tool macht unterschiedlich ist, was die Absenderardesse des Servers anbelangt. Das hat den Vorteil, dass man dann in seinem Sammel-/Verwaltungsaccount für eMails gleich
erkennt, von welchem Server die Benachrichtigung kommt.

Bei mir reicht bei der Blat-Installation die Info über den internen Exchangeserver, sowie die jeweilige Absendeadresse des Servers aus.

Der Befehl für Blat.exe auf dem jeweiligen Server würden dann - hier z.B. für den Exchangeserver (NAME d. Servers: EMAIL) so aussehen:

blat.exe -install email.meinedomain.de email-sicherung@meinedomain.de

*
  • Info: Blat.exe macht bei der "Installation" nix böses auf dem System! Es wird lediglich EIN Registryeintrag erstellt, in welchem die notwendige Grundkonfiguration abgespeichert ist.
  • TIPP: Genial ist auch, dass man verschiedene Profile für unterschiedliche Aufgaben anlegen kann - dazu müsst Ihr euch aber etwas mit blat.exe auseinandersetzen - das würde hier den
  • Rahmen wohl etwas sprengen
*

Angelegter Registry-Key von Blat:

[HKEY_LOCAL_MACHINE\SOFTWARE\Public Domain\Blat]
"SMTP server"="email.meinedomain.de"
"SMTP Port"="25"
"Try"="1"
"Login"=""
"Pwd"=""
"Sender"="email-sicherung@meinedomain.de"


So, blat.exe ist nun für diesen Server fertig konfiguriert. Auf einem anderen Server würde der o.g. Syntax dann lauten:
"blat.exe -install [SERVERNAME].[DOMAIN].[de,org,net,com etc.] [ABSENDENAME]@[DOMAIN][de,org,net,com etc.]"


Kommen wir jetzt zum Teil 2 der Lösung - DAS SCRIPT:

Nachdem wir nun die Möglichkeit haben, über ein Tool den Inhalt einer Datei per eMail zu versenden stellt sich immer noch die Frage - den Inhalt WELCHER Datei nehme ich da
vorzugsweise???
Natürlich macht es Sinn, den Inhalt einer Log-Datei der entsprechenden Sicherungsjobs auszulesen und zu versenden.

Wo liegt also nun die Log-Datei für das Windows-Backup-Tool (Ntbackup)?
Diese findet man - meiner Meinung nach unsinnigerweise - im Profil des Benutzers, unter dessen Kontextmenü (Benutzername/Passwort) der Backup-Job ausgeführt wird:
"C:\Dokumente und Einstellungen\[BENUTZERNAME]\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\"
Hier liegen max. 10 Dateien mit der Endung "log"
Also exemplarisch z.B. backup01.log, backup02.log etc.

Hier entstand nun also mein nächstes Problem: Wie kann ich dafür Sorge tragen, dass immer das AKTUELLSTE Log verwendet wird?
Nach 10 Tagen überschreibt NTBACKUP die Logs wieder...

Daher meine Anfrage hier im Scripting-Bereich des Forums:

Und die genialste Lösung ist der Ansatz von "bastla" - nämlich per Script die Datei herauszufinden, die neuesten Datums/Uhrzeit ist.

Ich habe also die zwei o.g. Scriptzeilen in eine neue Text-Datei kopiert, und diese in dann angepasst wie folgt:

for /f %%i in ('dir /b /od "C:\Dokumente und Einstellungen\[BENUTZERNAME]\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\*.log"') do @set Neueste=%%i
copy "C:\Dokumente und Einstellungen\[BENUTZERNAME]\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\%Neueste%" "c:\scripts\logfile.txt"
"c:\scripts\blat\blat.exe" "C:\scripts\logfile.txt" -to [VERWALTUNGSACCOUNTNAME]@[MEINEDOMAIN].[de,org,net,com etc.]
exit


Das ist fast schon alles.
Ich habe dann die Textdatei in "logmail.bat" umbenannt und in das oben erstellte Verzeichnis "c:\scripts" kopiert.
In dieses Verzeichnis wird übrigens dann auch immer die aktuellste Log-Datei aus "C:\Dokumente und Einstellungen\[BENUTZERNAME]\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\" kopiert. Dies Datei hat dann den Namen logfile.txt (hab ich halt für mich so festgelegt) und wird täglich überschrieben. - Das passiert übrigens in der zweiten Zeile
des Scripts.

So, jetzt noch den Inhalt der Datei logfile.txt per eMail versenden - das passiert in Zeile 3.

F...ast fertig...

Jetzt kommt noch der Teil, der eigentlich mit dem Hauptproblem nix mehr zu tun hat:

Kommen wir also zu Teil 3 der Lösung - Berechtigungen:
i
Wie wir an den Logfiles bereits gesehen haben werden die Sicherungslog-Files beim Benutzer in dessen Profil gespeichert.

Wir haben hier eine Domänenstruktur, und z.B. für die Ausführung von Scripts/geplante Tasks einen User angelegt, und einen für
die Sicherungsjobs über Windows-Backup (NTBackup), bei dem dann auch die Logfiles abgelegt werden.


  • Hinwei: Denkt zumindest dran, wenn ihr die Benutzer mit Domänen-Admin-Rechten ausstattet, dass diese sich zumindest nur an den betrefflichen Servern anmelden dürfen, und möglichst die Option
  • "Terminalverbindung zulassen" deaktiviert ist.


So, der Sicherungsjob auf dem Exchangeserver ist z.B. so eingerichtet, dass er um 22.00 Uhr startet - braucht ca. 30 Min.
Entsprechend geht man jetzt noch in "Start-Systemsteuerung-geplante Tasks", legt dort einen neuen Task an - gibt die auszuführende Datei an - C:\Scripts\logmail.bat - trägt dann der Einfachheit
halber "täglich" z.B. 23.59 ein, gibt dann den Benutzer für die geplanten Tasks an. Fertig.

Ab sofort erhaltet ihr immer die neueste Logdatei des aktuellen Sicherungsjobs per eMail zugesendet, seht auf einen Blick ob der Job ordentlich verlaufen ist, und müsst nicht mehr umständlich
X Server checken, oder unzählige Verzeichnisse überprüfen ob der Sicherungsjob vom Vorabend auch wirklich ausgeführt wurde.

Genial - Genial - Genial - nochmal VIELEN DANK an alle, die mir mit Rat und Tat bei diesem Problem geholfen haben!

Beste Grüße,

und: bis garantiert zum nächsten Mal - grins

Yours Pazifist
Member: bastla
bastla Nov 22, 2006 at 11:07:32 (UTC)
Goto Top
Hallo Pazifist!

Da hattest Du aber mit Deinem Beitrag wesentlich mehr Mühe als ich mit dem meinen ...

... und ich find's gut (nicht die Mühe, sondern Deine Einstellung face-smile und die Zusammenfassung).

Grüße
bastla
Member: pazifist
pazifist Nov 22, 2006 at 11:15:36 (UTC)
Goto Top
Hallo bastla,

da hast du aber ma mächtig recht - grins...

Ne - aber ich finde schon es gibt halt so n paar Grundsätze, wenn sich da alle dran halten hat jeder was davon.

Ich hab zwar noch nicht so sehr den Plan in diesem Forum - finds aber klasse - und bemühe mich zumindest.

Hab übrigens grade noch gesehen, dass man sowas wie TUTORIALS einstellen kann - vielleicht wäre mein Beitrag als solches hier besser aufgehoben? Bin für Verbesserungsvorschläge immer offen face-wink

Danke übrigens für die Bewertung!

@all
Falls ihr an einer Stelle noch ne Unstimmigkeit in der Beschreibung findet - bitte kurz posten, ich ändere das dann - habs das alles jetzt nicht mehr Schritt für Schritt nachvollzogen und getestet...

Beste Grüße
Pazifist
Member: Biber
Biber Nov 22, 2006 at 11:15:56 (UTC)
Goto Top
Moin pazifist,

tja, was soll ich sagen....?

DANKE !

Ich stufe diesen Beitrag einfach hoch als Tutorial. face-wink

Grüße
Biber
Member: BrooklynX
BrooklynX Jul 09, 2007 at 13:59:26 (UTC)
Goto Top
Super Klasse, genau sowas habe ich gesucht. face-smile


Merci
Member: X-Spezi
X-Spezi Jul 13, 2007 at 07:31:56 (UTC)
Goto Top
Hallo Pazifist,

tolle Beschreibung.

Das ist fast genau das Richtige was ich suche.
Ich möchte aber nicht den Inhalt vom Logfile sondern eine kpl. Datei als Anhang automatisch per Mail versenden.
Kannst Du mir sagen wie ich das realisieren kann ?

Grüße

X-Spezi
Member: pazifist
pazifist Jul 13, 2007 at 08:31:12 (UTC)
Goto Top
Hallo X-Spezi,

ich glaube, blat.exe ist hierfür nicht das geeignete Tool, blat.exe kann meines Wissens nach nur Inhalte aus Dateien auslesen und in eine eMail übergeben.
Für diese Aussage kann ich aber keine 100% Garantie übernehmen - vielleicht gehts ja doch.

Ich habe auch nur verschiedenste Infos zusammengetragen, und zu meinem speziellen Lösungsansatz zusammengebaut.

Ich empfehle dir, über das Board mal direkt bastla oder SlainteMhath anzuschreiben - die sind echte Scripting-Profis, und können dir garantiert weiterhelfen.

Hoffe du findest die Lösung - wenn ja, setz doch hier einen Link zu deinem Lösungsansatz!

Viel Erfolg bei der Recherche.

Gruß
Pazifist
Member: BrooklynX
BrooklynX Jul 13, 2007 at 08:42:41 (UTC)
Goto Top
Benutz -attach wenn du Blat benutzen willst. Dann kannst du Anhänge verschicken.....


Zitat aus der Manual:

Attachment and encoding options -----------------------
-attach <file> : attach binary file(s) to message (filenames comma separated)
-attacht <file> : attach text file(s) to message (filenames comma separated)
-attachi <file> : attach text file(s) as INLINE (filenames comma separated)


gruß

BrooklynX
Member: X-Spezi
X-Spezi Jul 13, 2007 at 08:48:15 (UTC)
Goto Top
Hallo BrooklynX,

Danke für die schnelle Antwort.

werde ich nachher gleich Testen.

gruß

X-Spezi
Member: pazifist
pazifist Jul 13, 2007 at 08:56:18 (UTC)
Goto Top
Cool was blat doch alles kann - war mit bis dato nicht bekannt - hab mich aber nach erfolgreicher Lösung meines Problems auch nicht tiefergehend damit beschäftig!

Danke für die schnelle Rückmeldung @ BrooklynX (ist halt doch das genialste Forum hier face-wink

Gruß
Pazifist
Member: BrooklynX
BrooklynX Jul 13, 2007 at 09:00:17 (UTC)
Goto Top
Kein Problem face-wink


Mittlerweile laufen bei mir 3 Scripte. Script eins ist für das Backup zuständig, Script 2 Für das Kopieren des aktuellsten Logfiles aus dem Data Ordner von NtBackup und Script 3 verschickt mir dann mittels Blatt die Logfiles. *gggggg