...auf Kiel gelegt...

ExilKieler's Abwurfstelle 
Filed under

Scripting

 

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. :-)

Filed under  //   Scripting   Sysadmin  

Comments [0]

HEUREKA!

Falls es jemanden interessiert:

Wenn jemand mal ein Exchange 2007 Messagetrackinglog mit der Powershell gefiltert in eine CSV-Datei ausgeben will, und sich ärgert, dass die Recipients in ein System.String[] Array verpackt sind, dann kann man das wie folgt auflösen:

Get-Transportserver | Get-MessageTrackingLog -start $Start -end $End  -EventID RECEIVE -ResultSize unlimited |Where-Object{$_.Source -eq "SMTP"} | Select TimeStamp, EventID, Source, @{Name="Recipients";Expression={$_.recipients}}, RecipientCount, totalbytes | Sort-Object -property timestamp | export-csv c:\myExport.csv

Alle anderen, denen das schon bekannt war - ich bin zur Zeit schon mit kleinen Dingen sehr glücklich... und denen, die das nicht die Bohne interessiert: Sorry für den Ausbruch... ;-)

Filed under  //   Scripting   Sysadmin  

Comments [0]