...auf Kiel gelegt...

ExilKieler's Abwurfstelle 
« Back to blog

Heureka die 2. - PowersHell

Mal wieder für diejenigen, die es interessiert:

Nachdem wir am 4.8. das Recipient-Array in der Ausgabe des Messagetracking-Logs aufgelöst ausgegeben haben, wandeln wir das Ganze jetzt so um, dass jeder Recipient in einer eigenen Zeile in einem benutzerdefinierten Logfile auftaucht.

$sent=@(Get-MessageTrackingLog -server $MyServer -start $Start -end $End -EventID SEND -ResultSize unlimited |Where-Object{$_.Source -eq "SMTP"} | Select TimeStamp, MessageId, ServerIP, EventID, Source, Sender, @{Name="Recipients";Expression={$_.recipients}}, RecipientCount, totalbytes | Sort-Object -property timestamp )

ForEach($item in $sent) 
{
#Recipients aufdröseln
    For ($i=0;$i -lt $item.RecipientCount;$i++)
    {
        if ($item.RecipientCount -eq 1)
            { $test = $item.Recipients }
        else
            { $test = $item.Recipients[$i]}

#Jeden Recipient in eigenem row-Datensatz (Hashtable) speichern

        $row = @{}  #Felder: TimeStamp, MessageId, ServerIP, EventID, Source, Sender, SingleRecipient, RecipientCount, totalbytes
        $row.TimeStamp = $item.TimeStamp
        $row.MessageID = $item.MessageId
        $row.ServerIP = $item.ServerIP
        $row.EventID = $item.EventID
        $row.Source = $item.Source
        $row.Sender = $item.Sender
        $row.SingleRecipient = $test
        $row.RecipientCount = $item.RecipientCount
        $row.totalbytes = $item.totalbytes

#Da die Ausgabe eines Arrays aus Hashtables in die Hose geht, wird hier die $row-Hashtable in ein PSObject umgewandelt

        $myrowobj = New-Object PSObject
        $myrowobj = ConvertTo-Object $row

#Datensatzobjekt in Ergbnisliste schreiben
        $ergebnis += $myrowobj
    }
}

#ergebnis in CSV-Datei ausgeben
$ergebnis | export-csv c:\ausgabe.csv


Um die Hashtable in ein Powershell-Objekt umzuwandeln, benötigen wir die folgende kleine Funktion:

function ConvertTo-Object($hashtable) #konvertiert Hashtable in PSObjekt
{
    $object = New-Object PSObject
    $hashtable.GetEnumerator() |
    ForEach-Object
        { Add-Member -inputObject $object -memberType NoteProperty -name $_.Name -value $_.Value }
    return $object
}

Das Ganze ist mit großer Wahrscheinlichkeit von hinten durch die Brust ins Auge geschossen und wer eine bessere Idee hat, darf sie gerne in die Comments schreiben, aber es funktioniert. :-)

Comments (0)

Leave a comment...

 
Got an account with one of these? Login here, or just enter your comment below.
Posterous-login    twitter