none
Mithilfe von Aufgabenplanung, bzw. Ben.def. Ereignisfilter, Report Mail versenden mit Inhalt "IP Adresse"?! RRS feed

  • Frage

  • Hi,

    Ich bin auf der Suche nach einer Lösung für mein folgendes Problem:

    Um den Zugriff, bzw. das Login von Usern auf eine Webseite zu reporten wurden von mir die folgenden Bedingungen in der Aufgabenplanung festgelegt:

    Trigger: Bei einem Ereignis: 

    XML-Ereignis:

    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID=4624 or EventID=4625)]]</Select>
      </Query>
    </QueryList>

    Aktionen: Programm starten (Skript ausführen)

    Skript:

    $EmailFrom = “*Email@from.ch*”

    $EmailTo = “*email@to.ch*”

    $Subject = “Zugriff auf *Webseite*”

    $Body = “Es wurde ein Zugriff auf *Webseite* geloggt.”

    $SMTPServer = “*SMTP-Server*”

    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)

    $SMTPClient.EnableSsl = $false

    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“*Mailuser*“, “*Userkürzel***UserPW*“);

    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

    (Das File liegt auf dem Server)

    Nun möchte ich dem folgenden Mail Informationen aus dem Ben.def. Ereignisprotokoll anhängen (Arbeitsstationsname & IP Adresse sowie Kontoname) das sowohl bei fehlgeschlagenen Versuchen, als auch bei geglückten.

    Kann mir da bitte jemand weiterhelfen?

    Danke im Voraus und beste Grüsse

    Dario

    Dienstag, 17. September 2013 09:07

Antworten

  • Du hast die wichtigste regelin der PowerShell anscheinend noch nicht verinnerlicht:

    PowerShell Produziert und verarbeitet Objekte keinen Text!

    Auch XML wird in PowerShell zu Objekten umgewandelt.

    Hier benötigst du aber Text als Ergebnis diesen kannst du leicht mit Out-String oder den anderen Text Cmdlets herstellen.

    $TxtEventDataData = Get-WinEvent -FilterHashtable @{logname='Security'; id=4624,4625} -MaxEvents 1 | ForEach-Object {
        
        [XML]$XMLEvent = $_.ToXML()
        
        $Doc = $XMLEvent.Get_DocumentElement()
        $Doc.EventData.Data | Out-String
    }
    
    $smtp = New-Object System.Net.Mail.SmtpClient
    $to = New-Object System.Net.Mail.MailAddress("report.ereignis@abf.ch")
    $from = New-Object System.Net.Mail.MailAddress("demo.abf_Log@abf.ch")
    $msg = New-Object System.Net.Mail.MailMessage($from, $to)
    $msg.subject = "test"
    $msg.body = $TxtEventDataData
    $smtp.host = "mail.abf.ch"
    $smtp.send($msg)

    Du musst natürlich den Get-WinEvent Filter noch anpassen und das -MaxEvents 1 entfernen.

    Wenn du PowerShell lernen willst ich habe Buchtipps kostenlose E-Books auf meinem Blog (siehe signatur)

    Ebenso habe ich einen mehrteiligen PowerShell grundkurs auf Youtube.

    gib dort mal "German PowerShell" ein.


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Mittwoch, 18. September 2013 08:57

Alle Antworten

  • Du redest hier immer von Benutzer definierten Ereignisprotokoll. Oben in deinem Beispielen taucht aber immer nur security auf. dies ist keine Benutzer definiertes Ereignisprotokoll sondern ein Standard Ereignisprotokoll.

    Ereignisprotokolle kannst du mit den Cmdlets Get-eventlog oder Get-WinEvent

    http://technet.microsoft.com/de-de/library/ee176846.aspx

    http://www.colorconsole.de/PS_Windows/de/Get-WinEvent.htm

    Das security event log kannst du nur als Administrator auslesen!

    Etwas so ?:

    Get-WinEvent -FilterHashtable @{logname='Security'; id=4624,4625} -MaxEvents 1 | ForEach-Object {
        
        [XML]$XMLEvent = $_.ToXML()
        
        $Doc = $XMLEvent.Get_DocumentElement()
        $Doc.EventData.Data
    }


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    • Bearbeitet Peter Kriegel Dienstag, 17. September 2013 10:40 dsdfsd
    Dienstag, 17. September 2013 09:29
  • Sorry, in dem Fall ein Standard Ereignisprotokoll.

    Ja in diese Richtung, doch wie erreiche ich nun das $Doc Inhalt meiner folgenden Mail wird? So funktionierts auf jedenfall nicht: 

    Get-WinEvent -FilterHashtable @{logname='Security'; id=4624,4625} -MaxEvents 1 | ForEach-Object {
        
        [XML]$XMLEvent = $_.ToXML()
        
        $Doc = $XMLEvent.Get_DocumentElement()
        
    }

    $smtp = New-Object System.Net.Mail.SmtpClient
    $to = New-Object System.Net.Mail.MailAddress("report.ereignis@abf.ch")
    $from = New-Object System.Net.Mail.MailAddress("demo.abf_Log@abf.ch")
    $msg = New-Object System.Net.Mail.MailMessage($from, $to)
    $msg.subject = "test"
    $msg.body = $Doc.EventData.Data
    $smtp.host = "mail.abf.ch"
    $smtp.send($msg)

    Aber was mach ich falsch?

    Danke für deine Mühe!

    Mittwoch, 18. September 2013 06:04
  • Oder muss ich das ganze in ein Logfile ausgeben und danach wieder einlesen? So a la:


    Get-WinEvent -FilterHashtable @{logname='Security'; id=4624,4625} -MaxEvents 1 | ForEach-Object {

        [XML]$XMLEvent = $_.ToXML()

        $Doc = $XMLEvent.Get_DocumentElement() | out-file -filepath $logfile -encoding default -append

    }

    $smtp = New-Object System.Net.Mail.SmtpClient
    $to = New-Object System.Net.Mail.MailAddress("report.ereignis@abf.ch")
    $from = New-Object System.Net.Mail.MailAddress("demo.abf_Log@abf.ch")
    $msg = New-Object System.Net.Mail.MailMessage($from, $to)
    $msg.subject = "test"
    $msg.body = "Logfile".txt"
    $smtp.host = "mail.abf.ch"
    $smtp.send($msg)

    Sorry hab noch wirklich ne Menge zu lernen :)

    Mittwoch, 18. September 2013 06:51
  • Du hast die wichtigste regelin der PowerShell anscheinend noch nicht verinnerlicht:

    PowerShell Produziert und verarbeitet Objekte keinen Text!

    Auch XML wird in PowerShell zu Objekten umgewandelt.

    Hier benötigst du aber Text als Ergebnis diesen kannst du leicht mit Out-String oder den anderen Text Cmdlets herstellen.

    $TxtEventDataData = Get-WinEvent -FilterHashtable @{logname='Security'; id=4624,4625} -MaxEvents 1 | ForEach-Object {
        
        [XML]$XMLEvent = $_.ToXML()
        
        $Doc = $XMLEvent.Get_DocumentElement()
        $Doc.EventData.Data | Out-String
    }
    
    $smtp = New-Object System.Net.Mail.SmtpClient
    $to = New-Object System.Net.Mail.MailAddress("report.ereignis@abf.ch")
    $from = New-Object System.Net.Mail.MailAddress("demo.abf_Log@abf.ch")
    $msg = New-Object System.Net.Mail.MailMessage($from, $to)
    $msg.subject = "test"
    $msg.body = $TxtEventDataData
    $smtp.host = "mail.abf.ch"
    $smtp.send($msg)

    Du musst natürlich den Get-WinEvent Filter noch anpassen und das -MaxEvents 1 entfernen.

    Wenn du PowerShell lernen willst ich habe Buchtipps kostenlose E-Books auf meinem Blog (siehe signatur)

    Ebenso habe ich einen mehrteiligen PowerShell grundkurs auf Youtube.

    gib dort mal "German PowerShell" ein.


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Mittwoch, 18. September 2013 08:57
  • Muss ich unbedingt machen, sieht hammer aus, danke dir!

    Doch im Moment schlage ich mich noch mit dem Skript herum..

    Blicke noch nicht ganz durch, wieso meinst du den Get Filter anpassen??

    Zusätzlich hab ich nun ID durch UserID getauscht um die User zu filtern, sollte klappen oder?

    $TxtEventDataData = Get-WinEvent -FilterHashtable @{logname='Security'; UserID='S-1-5-21-1136710145-1070894105-2219024594-1022'} | ForEach-Object {

    Mittwoch, 18. September 2013 09:57
  • wieso meinst du den Get Filter anpassen?

    So wie der Filter in meinem Code war, holt er ALLE Events mit den angegebenen Event IDs. Auch die, die schon mal in der Steinzeit passiert sind. Hier sollte man den Filter möglichst so verfeinern, das er nur Events zurück liefert die man auch haben will. (zum Beispiel den Zeitraum einschränken)


    Zusätzlich hab ich nun ID durch UserID getauscht um die User zu filtern, sollte klappen oder?

    $TxtEventDataData = Get-WinEvent -FilterHashtable @{logname='Security'; UserID='S-1-5-21-1136710145-1070894105-2219024594-1022'} | ForEach-Object {

    Wenn er was zurück liefert, hat es geklappt ;-)

    Ich kenne mich mit Eventlogs nicht so aus! Es kann sein das der Hash Filter nur auf der obersten Ebene filtern kann.

    Du meinst das wahrscheinlich so !?

    Get-WinEvent -FilterHashtable @{logname='Security'; id=4624,4625} -MaxEvents 1 | ForEach-Object {
        
        [XML]$XMLEvent = $_.ToXML()
        $Doc = $XMLEvent.Get_DocumentElement()
        
        # SID mit XPath extrahieren
        $SID = $XMLEvent.SelectSingleNode('//*[local-name() = "Data" and @Name = "TargetUserSid"]/text()').Data
            
        # SID vergleichen
        If($SID -eq 'S-1-5-21-1136710145-1070894105-2219024594-1022'){
            $Doc.EventData.Data        
        }
    }



    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!



    • Bearbeitet Peter Kriegel Mittwoch, 18. September 2013 12:41 asdsdsadsa
    Mittwoch, 18. September 2013 10:48