none
Aus Get-WinEvent im Objekt Message Pfad auslesen RRS feed

  • Frage

  • Hallo Leute,

    ich möchte eigentlich etwas ziemlich simples machen, aber ich bekomme es einfach nicht hin.

    $msgdata = Get-WinEvent -FilterHashTable @{LogName='Application';ID='35'} | Select-Object -ExpandProperty Message

    Oberer Code gibt mir die Beschreibung der Event ID 35 zurück.

    Ich möchte folgendes erreichen:

    Wenn in dieser Beschreibung eine EXE-Datei erwähnt wird, möchte ich nur die EXE-Datei mitsamt dem Pfad zurückgeben und ausgeben lassen ohne das ich wissen muss, wie der Pfad und die EXE-Datei heißt.

    Vielen Dank für eure Antworten!

    Grüße

    PowerShellGuy

    Dienstag, 16. Februar 2021 16:41

Antworten

  • PS: Dein Beispiel funktioniert leider nicht.

    "... funktioniert leider nicht." ist im Allgemeinen keine sehr hilfreiche Fehlerbeschreibung. ... und wie soll es auch funktionieren, wenn Du mir unvollständige oder sogar falsche Informationen gibst? Warum hast Du denn nicht gleich die korrekte Event-ID angegeben?

    $FilterHashtable = @{
        LogName = 'Application'
        ID = 10010
    }
    
    $msgdata = 
    Get-WinEvent -FilterHashTable $FilterHashtable | 
    Select-Object -ExpandProperty Message
    
    foreach($Message in $msgdata){
        $Message -match "(?<=').*\.exe(?=')" | Out-Null
        $Matches[0]
    }

    Noch etwas: Wenn Du Code postest oder Konsolen-Output oder Beispiel-Daten oder Fehlermeldungen - bitte alles als Code formatieren! Danke. ;-)

    Live long and prosper!

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

    Mittwoch, 17. Februar 2021 07:51

Alle Antworten

  • Hallo und Willkommen im Deutschen Microsoft Windows Powershell Forum.

    Wenn die von Dir gewünschte Information nicht noch in einer anderen Property auftaucht, wirst Du den Messaga-Text wohl mittels regex parsen müssen. 

    Ich habe mal auf meinem Client nach einem Event mit der ID 35 gesucht und leider keine gefunden. Vielleicht kannst Du ein oder zwei solche Messages hier posten, dann schauen wir mal, was wir da hinzaubern können.  ;-) 


    Live long and prosper!

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

    • Bearbeitet BOfH-666 Dienstag, 16. Februar 2021 16:50
    Dienstag, 16. Februar 2021 16:49
  • Im allereinfachsten Fall könnte sowas hier funktionieren:

    $msgdata -match '(?<=").*\.exe(?=")'
    $Matches[0]


    Live long and prosper!

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

    Dienstag, 16. Februar 2021 16:59
  • Hey BOfH-666,

    vielen Dank für deine Hilfe.

    Also Event ID 10010 - Source RestartManager - Application wäre die ID, die mein Vorhaben betrifft.

    Wollte ein Bild hochladen, aber es scheint einfach nicht hochzuladen.


    Folgenden Text hat das Event 10010:

    Application 'C:\Program Files (x86)\Seagate\Seagate Dashboard 2.0\DeviceAgent.exe' (pid 3180) cannot be restarted - Application SID does not match Conductor SID..




    Ich möchte, das folgender String z. B. in eine Variable gespeichert wird:

    C:\Program Files (x86)\Seagate\Seagate Dashboard 2.0\DeviceAgent.exe




    Das war's eigentlich.

    PS: Dein Beispiel funktioniert leider nicht.


    Vielen herzlichen Dank nochmals und schönen Tag noch.


    • Bearbeitet PowerShellGuy Mittwoch, 17. Februar 2021 10:10 Pfad in Codeblock einpflegen
    Mittwoch, 17. Februar 2021 00:37
  • PS: Dein Beispiel funktioniert leider nicht.

    "... funktioniert leider nicht." ist im Allgemeinen keine sehr hilfreiche Fehlerbeschreibung. ... und wie soll es auch funktionieren, wenn Du mir unvollständige oder sogar falsche Informationen gibst? Warum hast Du denn nicht gleich die korrekte Event-ID angegeben?

    $FilterHashtable = @{
        LogName = 'Application'
        ID = 10010
    }
    
    $msgdata = 
    Get-WinEvent -FilterHashTable $FilterHashtable | 
    Select-Object -ExpandProperty Message
    
    foreach($Message in $msgdata){
        $Message -match "(?<=').*\.exe(?=')" | Out-Null
        $Matches[0]
    }

    Noch etwas: Wenn Du Code postest oder Konsolen-Output oder Beispiel-Daten oder Fehlermeldungen - bitte alles als Code formatieren! Danke. ;-)

    Live long and prosper!

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

    Mittwoch, 17. Februar 2021 07:51

  • Wollte ein Bild hochladen, aber es scheint einfach nicht hochzuladen.

    Du musst Dein Account freischalten lassen: Verify Account 43

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Mittwoch, 17. Februar 2021 07:58
  • Wollte ein Bild hochladen, aber es scheint einfach nicht hochzuladen.

    Dazu auch gleich noch ein Wort:

    Ein Bild ist in den seltensten Fällen wirklich hilfreich, wenn es um Code oder Beispiel-Daten oder Fehlermeldungen oder sowas geht. Es genügt in der Regel völlig, einfach den Test zu posten. ;-)


    Live long and prosper!

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

    Mittwoch, 17. Februar 2021 08:31
  • Vielen Dank für deine Antwort.

    Ich werde es gleich ausprobieren...

    Mittwoch, 17. Februar 2021 10:12
  • Hab den Code jetzt ausprobiert und leider kommt folgende Fehlermeldung:

    Cannot index into a null array.
    At C:\Users\user\Desktop\test.ps1:23 char:1
    + $Matches[0]
    + ~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : NullArray
     
    Cannot index into a null array.
    At C:\Users\user\Desktop\test.ps1:23 char:1
    + $Matches[0]
    + ~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : NullArray

    Anscheinend wird das Array nicht befüllt.

    Es liegt wahrscheinlich an folgender Zeile:

    $Message -match '(?<=").*.exe(?=''")' | Out-Null

    Stimmt der Ausdruck?

    In der Ereignisanzeige kommen folgende Zeilen zu 10010:

    Application 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe' (pid 9588) cannot be restarted - Application SID does not match Conductor SID..
    
    Application 'C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE' (pid 4772) cannot be restarted - Application SID does not match Conductor SID..

    Ich möchte nur

    'C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe'

    und

    'C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE'

    Diese Programme möchte ich dann über eine Variable neu starten.

    Ach, wo finde ich zum Nachschlagen, wie man solche Ausdrücke bildet?

    Im Internet gibt es da keine Sammlung von Ausdrücken.

    Unter Ausdruck meine ich folgendes:

    (?<=").*.exe(?=''")

    Ich danke euch nochmals für die Hilfe.

    Grüße


    Freitag, 26. Februar 2021 10:13
  • Stimmt der Ausdruck?

    Das kommt davon, wenn man nicht alle nötigen Informationen rausrückt. Die Events sehen auf Deutschen Clients anders aus als auf Englischen Clients.

    Ich hab das Regex-Pattern oben in meinem Code-Beispiel nochmal angepasst. Probier mal so.   ... und Du darfst den Code gern nach Belieben anapassen, damit er bei Dir so läuft, wie Du das brauchst.

    Zum "Rumspielen" mit Regular Expressions gibt es zahlreiche Angebote im Netz - z.B. regex101.com.  <- hinter dem Link ist ein Beispiel für Dich zum "Herum-Probieren".

    Viel Spaß


    Live long and prosper!

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

    Freitag, 26. Februar 2021 10:36
  • Das kommt davon, wenn man nicht alle nötigen Informationen rausrückt.

         Hahaha, da hast du recht.

         Danke dir nochmals für deine Mühe. Ich schätze das sehr und ich werde mich bessern ;).

    Freitag, 26. Februar 2021 11:37
  • Ich weiß, ich könnte es selbst machen, aber wie bekomme ich nur den Datei-Namen + Extension?

    Also so

    powershell_ise.exe

    Ich bedanke mich recht herzlich!

    Freitag, 26. Februar 2021 12:29
  • Ich weiß, ich könnte es selbst machen, aber wie bekomme ich nur den Datei-Namen + Extension?

    Split-Path mit dem Parameter -Leaf.  ;-)

    Live long and prosper!

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

    Freitag, 26. Februar 2021 14:43
  • Danke dir ;-).
    Montag, 1. März 2021 09:31