none
Inhalt der aktuellen Dateien in einem Verzeichnis auslesen RRS feed

  • Frage

  • Hallo Zusammen,

    wir legen über eine Kombination von "nxlog", Powershell und Windows Task Sceduler, die mit Error/Warnung behafteten Event Logs und zwar aller 5 Minuten als "eventlog_Zeitstempel.log" in einem Verzeichnis ab. Die *.log Dateien, die älter als 60 Minuten sind werden automatisch entfernt, sodass sich immer nur 12 Dateien in diesem Verzeichnis befinden.

    Mit dem Befehl " Get-Content C:\...\eventlog*.log >> Gesamtlog.csv " kann ich die aktuelle Inhalte der vorhandenen Dateien in einer CSV Datei schreiben.

    Wie soll ich nun vorgehen, dass ich ab jetzt nur der Inhalt der neuen Dateien in der Gesamtlog.csv dazuschreibe? Gibt es ein Befehl oder eine Option mit Get-content, dass mit Zeitstempel arbeitet?

    Danke & Gruß

    Madjeed

    Mittwoch, 26. Oktober 2016 15:49

Antworten

  • Probier mal 

    $gesamtlog="C:\Temp\logs\Gesamtlog\gesamtlog.csv"

    $Temptrash|Get-Content|Out-File -FilePath $gesamtlog -Append


    Ich kann es leider nicht mehr testen...mein Kind hat Geburtstag:-)

    Freu mich auf eine Antwort


    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!

    • Als Antwort markiert Madjeed Freitag, 28. Oktober 2016 10:16
    Donnerstag, 27. Oktober 2016 11:43
  • Korrigier mich bitte, wenn ich mich irre, aber Tonis Code enthält kein 'Export-CSV' oder 'Import-CSV'. Wenn Du eine Funktion benutzt, die in Deinen Text-Dateien Kommata einfügt, könntest Du diese jetzt Komma-getrennten Daten einmal mit Import-CSV -Delimiter ',' einlesen und dann gleich mit Export-CSV -Delimiter ';' wieder exportieren. Dann hättest Du Dein Semikolon.

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''



    • Bearbeitet BOfH-666 Freitag, 28. Oktober 2016 07:36
    • Als Antwort markiert Madjeed Freitag, 28. Oktober 2016 10:17
    Freitag, 28. Oktober 2016 07:35

Alle Antworten

  • Ich bin mir nicht wirklich sicher, dass ich den Prozess verstanden habe. Aber über welchen Mechanismus werden denn die 'zu alten' log Dateien gelöscht? Wär es nicht möglich, vor dem Löschen, die Dateien in das Gesamtlog zu schreiben?

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 26. Oktober 2016 16:43
  • Moin,

    brauchst Du denn die einzelnen Dateien noch, nachdem Du sie in die große Datei übertragen hast? Falls nein, kannst Du sie doch einfach gleich nach dem Exportieren löschen...


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (in German) -> http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Mittwoch, 26. Oktober 2016 21:38
  • Schau mal, hast du es dir so vorgestellt?Wobei das auf der Grundlage läuft, die "alten" Logs zu löschen, so wie es Evgenij und BOfH schon angefragt haben

    #Pfad zu den Logs
    $pfad="C:\Temp\Logs"
    #Pfad zum Gesamtlog
    $gesamtlog="C:\Temp\logs\Gesamtlog\gesamtlog.log"
    #Erfasse die Logdateien, die danach wieder gelöscht werden
    $Temptrash=Get-ChildItem -Path $pfad -File
    #Füge Inhalt der Logs dem GEsamtlog hinzu
    $Temptrash|Get-Content|Add-Content -Path $gesamtlog
    #Lösche die alten Logdateien
    $Temptrash|Remove-Item -Include *.log

    Bei diesem Beispiel liegt die gesamtlog.log in einem anderen Ordner.



    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!



    Donnerstag, 27. Oktober 2016 07:10
  • Hallo Zusammen,

    @ Evgenij, BOfH und Toni : Vielen Dank für Eure Rückmeldungen und Vorschlägen !

    Der Einsatz vorhandene Logdateien nach der Bearbeitungh zu löschen wird wohl die Lösung sein.

    @ Toni: kann man Dein Script soweit erweitern, dass die Logeinträge nicht in einer TXT-Datei sondern gleich in einer CSV Datei geschrieben werden, wobei als Delimiter dann nicht ',' sondern ';' verwendet wird ?

    Z.B. mit :

    export-csv -delimiter ';' -Append path $gesamtlog 

    wobei :

    $gesamtlog="C:\Temp\logs\Gesamtlog\gesamtlog.csv"

    sein wird.

    Donnerstag, 27. Oktober 2016 11:00
  • > Wie soll ich nun vorgehen, dass ich ab jetzt nur der Inhalt der neuen
    > Dateien in der Gesamtlog.csv dazuschreibe? Gibt es ein Befehl oder eine
    > Option mit Get-content, dass mit Zeitstempel arbeitet?
     
    Nein, aber Du könntest vorher mit Get-[Child]Item die Logs ermitteln und
    dann auswerten, ob deren Timestamp neuer ist als der des CSV - wenn ja,
    dann reinschreiben, wenn nein, dann nicht.
     
    Einfacher ist aber natürlich, was bereits geschrieben wurde :)
     
    Donnerstag, 27. Oktober 2016 11:13
  • Probier mal 

    $gesamtlog="C:\Temp\logs\Gesamtlog\gesamtlog.csv"

    $Temptrash|Get-Content|Out-File -FilePath $gesamtlog -Append


    Ich kann es leider nicht mehr testen...mein Kind hat Geburtstag:-)

    Freu mich auf eine Antwort


    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!

    • Als Antwort markiert Madjeed Freitag, 28. Oktober 2016 10:16
    Donnerstag, 27. Oktober 2016 11:43
  • Jooo, das funktioniert, Danke !

    an welcher Stelle Kann ich noch die Option  -delimiter ';'  verwenden? Aktuell wird durch komma getrennt.

    PS: Hezlichen Glückwunsch an -freundliche -fleißige Papa !

    Donnerstag, 27. Oktober 2016 11:57
  • -delimiter ist ein Parameter vom cmdlet Export-CSV

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 27. Oktober 2016 12:55
  • ja das ist mir bekannt, es funktioniert aber noch nicht wenn ich die cmdlets export-csv oder convertto-csv mit dem Parameter  - delimiter ";"  in Verbindung mit 

    $Temptrash|Get-Content|Out-File -FilePath $gesamtlog -Append 

    bringe !

    Als Trennzeichen müssen wir Semikolon einsetzen, da komma sehr oft in den Texten verwendet werden.

    Donnerstag, 27. Oktober 2016 14:49
  • > Als Trennzeichen müssen wir Semikolon einsetzen, da komma sehr oft in
    > den Texten verwendet werden.
     
    Naja - die Input-Daten sind kein CSV, oder? Bisher wird ja nur der Input
    1:1 in das csv geschrieben... Wo soll da jetzt das Semikolon rein?
     
    Donnerstag, 27. Oktober 2016 15:13
  • Die Inputdateien sind reine TXT-Dateien, die jedoch bei der Konvertierung TXT > CSV per default mit Kommas versehen werden.

    Ich möchte halt anstatt Komma die Semikolons haben, weiß aber nicht ganz, wie ich dieses Vorhaben per -delimiter ";" oder ähnliches in dem von Toni vorgeschlagene Script einbaue !

    Freitag, 28. Oktober 2016 07:09
  • Korrigier mich bitte, wenn ich mich irre, aber Tonis Code enthält kein 'Export-CSV' oder 'Import-CSV'. Wenn Du eine Funktion benutzt, die in Deinen Text-Dateien Kommata einfügt, könntest Du diese jetzt Komma-getrennten Daten einmal mit Import-CSV -Delimiter ',' einlesen und dann gleich mit Export-CSV -Delimiter ';' wieder exportieren. Dann hättest Du Dein Semikolon.

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''



    • Bearbeitet BOfH-666 Freitag, 28. Oktober 2016 07:36
    • Als Antwort markiert Madjeed Freitag, 28. Oktober 2016 10:17
    Freitag, 28. Oktober 2016 07:35
  • Durch den Befehl

    $gesamtlog="C:\Temp\logs\Gesamtlog\gesamtlog.csv"

    $Temptrash|Get-Content|Out-File -FilePath $gesamtlog -Append 

    wird eine CSV Datei mit Kommatas erzeugt, ohne weitere cmdlets zu verwenden.

    Mit der cmdlets import-csv -delimiter ','  und  export-csv -delimiter ';'  hatte ich auch ein paar mal versucht gehabt, hatte aber nicht funktioniert bis ich verstanden habe, dass man bei der genannten cmdlets keine Variablen benutzen kann !!

    Erst als ich ein import-csv $gesamtlog -delimiter ','  durch ein import-csv "C:\...\gesamtlog.csv " -delimiter ',' erstzt habe ( und das gleiche auch für export-csv ), hatte es funktioniert.

    Vielen Dank !

    PS: Ich lasse dieses Thread bis nächste Woche noch offen.

    Freitag, 28. Oktober 2016 10:15