none
Log Datei Zeilenweise nach Stichwort prüfen und pro Zeile einen String erstellen RRS feed

  • Frage

  • Hallo,

    ich habe eine Log Datei in welche alle Fehlercodes je nach Applikation gespeichert werden. Die Fehlercodes lauten z.B. 2596e. Nun möchte ich alle Zeilen welche einen Fehlercode enthalten rausfiltern und in ein eigenes Ereignisprotokol schreiben.

    Meine Idee ist es jetzt den Text mit Hilfe von regular Expressions zu durchsuchen und dann für jede Zeile einen eigenen String zu erstellen welchen ich dann ins Ereignisprotokol schreiben kann.

    Bis jetzt bin ich hier:

    $Dat = "C:\Users\Desktop\New.log"
    $TextFound = $False
    $reader = [System.IO.File]::OpenText($Dat)
    try {
        while ($True) {
            $line = $reader.ReadLine()      
            if ($line -eq $null) { break }
            If($line -match '^[0-9]{4}e{1}$') {
                $TextFound = $True
            }   
           If($TextFound) {        
                $line
                write-EventLog -LogName TEST -Source logs -EntryType Error -EventId 1 -Message $line

            }
       }
    }
    finally {
        $reader.Close()
    }

    Das problem ist, dass er in $line nicht nur eine Zeile schreibt sondern alles ab der ersten Expression. Es soll aber wenn ein Errorcode in einer Zeile steht diese Zeile "rauskopiert" werden und danach soll weitergesucht werden bis zum nächsten errorcode, dieser soll dann wieder "rauskopiert" werden.Sodass nachher jede Errorzeile in das Eventlog geschrieben wird.

    Zudem kann er im EventLog unter -Message $line nicht einfügen.

    Ich komme da einfach nicht weiter und drehe mich Gedanklich im Kreis


    Ich hoffe das war verständlich erklärt und ihr könnt mir helfen.




    • Bearbeitet VAG_only Donnerstag, 8. September 2016 12:50
    Donnerstag, 8. September 2016 12:31

Antworten

  • Hallo,

    das er nur nur die Codes am Anfang findet liegt an deiner Schablone, mit dem Zeichen ^ definierst Du hier den Zeilenanfang und direkt darauf sollen vier Ziffern folgen, steht nun irgendetwas anderes zwishcen Satzanfang und der ersten Ziffer greift deine Schablone natürlich nicht mehr.

    Um eine vernüftige Schablone zu bauen müßte man die Datei sehen, ich habe hier mal eine "aufgeweichte" die funktionieren könnte.

    '^.*[0-9]{4}e{1}.*$'

    Warum er nur den Match schreibt kann ich aus dem Code obern nicht rauslesen, hast du noch andere Dinge geändert?

    Beste Gruesse
    brima

    • Als Antwort markiert VAG_only Freitag, 9. September 2016 07:59
    Freitag, 9. September 2016 07:33

Alle Antworten

  • Hallo,

    wenn dein Match trifft setzt du die Varaibel $TextFound auf $true und Hand der schreibts Du die Eventlog, dort musst du dann die Variable aber wieder auf $false setzen, sonst bleibt die auch für die folgenden Zeilen ohne Treffer auf $true.

    Beste Gruesse
    brima


    • Bearbeitet brima Donnerstag, 8. September 2016 13:30
    Donnerstag, 8. September 2016 13:30
  • Hallo,

    wenn dein Match trifft setzt du die Varaibel $TextFound auf $true und Hand der schreibts Du die Eventlog, dort musst du dann die Variable aber wieder auf $false setzen, sonst bleibt die auch für die folgenden Zeilen ohne Treffer auf $true.

    Beste Gruesse
    brima


    Hallo, danke für die Antwort.
    es funktioniert so auf jedenfall, allerdings schreibt er dann nur das -match raus und nicht mehr die ganze Zeile.

    Und mir ist aufgefallen das er nur den Fehlercode rausschreibt, welche am Zeilenanfang steht. Alle Fehlercodes mitten in der Zeile werden ignoriert.

    • Bearbeitet VAG_only Freitag, 9. September 2016 06:35
    Freitag, 9. September 2016 05:31
  • Hallo,

    das er nur nur die Codes am Anfang findet liegt an deiner Schablone, mit dem Zeichen ^ definierst Du hier den Zeilenanfang und direkt darauf sollen vier Ziffern folgen, steht nun irgendetwas anderes zwishcen Satzanfang und der ersten Ziffer greift deine Schablone natürlich nicht mehr.

    Um eine vernüftige Schablone zu bauen müßte man die Datei sehen, ich habe hier mal eine "aufgeweichte" die funktionieren könnte.

    '^.*[0-9]{4}e{1}.*$'

    Warum er nur den Match schreibt kann ich aus dem Code obern nicht rauslesen, hast du noch andere Dinge geändert?

    Beste Gruesse
    brima

    • Als Antwort markiert VAG_only Freitag, 9. September 2016 07:59
    Freitag, 9. September 2016 07:33
  • Deine "aufgeweichte" Schablone funktioniert und er schreibt dadurch nun auch das Match raus.


    Vielen Dank dir, auch das du immer ein wenig Text dazu geschrieben hast fürs Verständnis.
    • Bearbeitet VAG_only Freitag, 9. September 2016 09:37
    Freitag, 9. September 2016 07:59