none
nach Inhalt in Dateien suchen mit WERT und (ODER) Verknüpfung, Performance RRS feed

  • Frage

  • hallo Powershell Gurus

    wir haben sehr viele große Mail Logdateien deren Auswertung sehr lange dauert. Jetzt möchte mir täglich von den LOG Dateien die Zeilen mit User "xyz" und DELIVER oder SEND in eine andere Datei kopieren, damit die Auswertung aus diesen kumulierten Dateien schneller geht.

    ich habe im Internet für die Suche nach mehreren Begriffen ein ähnliches Beispiel mit Select-String gefunden. Wie müsste das mit OR aussehen

    Get-ChildItem C:\Logs |
      where { $_ | Select-String -Pattern 'DELIVER' } |
      where { $_ | Select-String -Pattern 'SEND' } |
      ...

    oder sollte ich aus Performance Gründen die Daten mit Select-String vorfiltern

    gci C:\Logs| select-string -pattern '(xyz)'
     

    und dann eine Schleife mit IF verwenden. Da select-string extrem gut und schnell arbeitet.

     

    oder habt ihr einen andere performante  Anregung?



    Chris

    Freitag, 19. Januar 2018 18:49

Antworten

  • Moin,

    also ich würde es mal mit 

    Select-String -Path "c:\logs\*.log" -Pattern "(SEND|DELIVER)"
    probieren. Du musst natürlich schauen, wie Du die Dateien ausschließt, die bereits abgescannt wurden.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.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.

    • Als Antwort markiert -- Chris -- Samstag, 20. Januar 2018 05:43
    Freitag, 19. Januar 2018 19:31
  • -Pattern steht für einen regular Expression, der von einfach bis komplex gehen kann.

    Was alles so möglich ist findest du hier:
    https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

    Allerdings muss nicht alles implementiert sein. Ein Ausdruck mit Klammern und Pipe wird mit "oder" verknüpft, wobei dies auch wieder Teilausdrücke sein können:

    ([A-Z]{0,2}[0-9]{,5}|[0-9A-Z].*)

    (M(ü|ue)ller|Me[yi]er)

    u.v.m.

    • Als Antwort markiert -- Chris -- Samstag, 20. Januar 2018 05:43
    Freitag, 19. Januar 2018 21:08

Alle Antworten

  • Moin,

    also ich würde es mal mit 

    Select-String -Path "c:\logs\*.log" -Pattern "(SEND|DELIVER)"
    probieren. Du musst natürlich schauen, wie Du die Dateien ausschließt, die bereits abgescannt wurden.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.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.

    • Als Antwort markiert -- Chris -- Samstag, 20. Januar 2018 05:43
    Freitag, 19. Januar 2018 19:31
  • danke Evgenij,  

    d.h. das Pipe steht für entweder oder. Wie würdest du noch nach E-Mail Adresse einschränken, dass es noch performant bleibt.

    vorher in eine Variable? $x = Select-String -Path "c:\logs\*.log" -Pattern "(SEND|DELIVER)" oder mit | where einschränken

    Also alle Mails von Smirnov und -Pattern "(SEND|DELIVER)"

    PS: für das ausschließen hätte ich schon eine Idee in dem ich einfach immer alle pro Tag nehme.


    Chris

    Freitag, 19. Januar 2018 20:29
  • -Pattern steht für einen regular Expression, der von einfach bis komplex gehen kann.

    Was alles so möglich ist findest du hier:
    https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

    Allerdings muss nicht alles implementiert sein. Ein Ausdruck mit Klammern und Pipe wird mit "oder" verknüpft, wobei dies auch wieder Teilausdrücke sein können:

    ([A-Z]{0,2}[0-9]{,5}|[0-9A-Z].*)

    (M(ü|ue)ller|Me[yi]er)

    u.v.m.

    • Als Antwort markiert -- Chris -- Samstag, 20. Januar 2018 05:43
    Freitag, 19. Januar 2018 21:08