Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
Sebialt

Error.log durchsuchen und "Flag" setzen?

Empfohlene Beiträge

Ich habe ein kleines Problem und vielleicht kann mir ja jemand helfen.

Ich durchsuche mittels Powershell eine LOG-Datei und beim Finden von einem bestimmten Pattern versendet das Script eine E-Mail.

IF (Select-String -path "Pfad\Error.log" -Pattern  "Error1") 
{ 
Send-MailMessage -to "Adresse1@Domain.de" -from "Adresse2@Domain.de" -Subject "Fehler gedunden." -body "Fehler bla bla bla..." -Encoding ([System.Text.Encoding]::UTF8)   
}

Das Script wird über die Aufgabenplanung alle paar Minuten aufgerufen.

Nun kann es natürlich vorkommen, dass ein Fehler auftritt (im Log steht das Pattern) und eine E-Mail versendet wird.
Behebe ich nun diesen Fehler, steht im Error.log (es wird jeden Tag neu erzeugt) immer noch der Fehler "Error1" und es wird beim nächsten Durchlaufen des Scrips eine E-Mail versendet.

Das möchte ich gerne verhindern.

Mein Ansatz wäre, die Anzahl der "Error1" Einträge zu zählen und die Anzahl in eine Datei zu schreiben. Das Script könnte dann vergleichen ob die Anzahl steigt -> dann E-Mail versenden oder gleich ist -> dann keine E-Mail versenden.

 

Wie könnte ich das in Powershell umsetzen?
Oder hat vielleicht jemand eine andere Idee, wie ich meine Vorhaben umsetzen kann?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Falls das Skript nicht beendet wird, könntest du über eine Schleifen-Variable den Stand speichern und wieder abrufen. Andernfalls Olaf seinen Vorschlag eher in betracht ziehen.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Das Error.log wird um 0:00 Uhr automatisch umbenannt und gespeichert (Datum_Error.log) und eine neues (Error.log) wird generierte.

 

... kann man es nicht einfach löschen ...

Löschen kann ich es nicht einfach, da die alten Logs 30 Tage aufgehoben werden müssen.

 

Falls das Skript nicht beendet wird ...

Das Script wird nach jedem Lauf beendet, sodass der Wert in einer Variablen verloren gehen würde.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hmmm ... Du bräuchtest dann wohl doch eine "Zählvariable". Die Kannst Du dann (pro Tag) auswerten und entsprechend reagieren. Oder Du schreibst - so wie Du es oben schon selbst angeregt hast - den "Zähler" in eine Datei und liest diesen dann aus. Was genau fehlt Dir denn für die Umsetzung der Zählvariable?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Um das Skript am "leben" zu halten, könntest du es einmal am Tag via der Aufgabenplanung starten und es läuft den ganzen Tag durch.

$Date = (Get-Date).ToShortDateString()

do
{
  ...
  ...
  
  Start-Sleep -Seconds 300 # 5 Minuten warten...
} while ( ((Get-Date).ToShortDateString()) -eq $Date )

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Was genau fehlt Dir denn für die Umsetzung der

 

Die Anzahl kann ich mir in eine Datei schreiben (müsste so eigentlich gehen)

$VarA = Select-String -path "Pfad\Error.log" -Pattern "Error1"
$VarA.Matches.Count | Out-File -Filepath "Pfad\Flag.txt"

Aber wie kann ich das mit der Anzahl eines neuen Durchlaufs vergleichen?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Du liest den Inhalt der Datei mit Get-Content ein. Dabei erhältst Du einen String. Den kannst Du zum Integer "casten" und kannst das dann mit Deinem $VarA.Matches.Count vergleichen.  ... also ungefähr so

[INT]$SavedCount = Get-Content -Path "Pfad\Flag.Txt"

... jetzt hast Du die vorher dort gespeicherte Anzahl in der Variablen $SavedCount und kannst damit weiterspielen.   ;)


... was mir noch einfällt ... Du müsstest dann vielleicht noch das Datum der Datei Flag.txt mit beachten, damit Du nicht beim ersten Durchlauf des Tages den "Error-Count" mit dem Vortag vergleichst.  ;)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hm - in den Logs, die ich so schreibe, hat jeder Eintrag einen Zeitstempel. Wenn das bei Dir auch so ist, müßtests Du ja nur den Zeitstempel extrahieren und Dir merken...

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×