Get-MessageTrackingLog wyswietlenie wszystkich odbiorców

Uruchamiając polecenie Get-MessageTrackingLog w celu wyszukania informacji na temat wysłanych lub otrzymanych emaili otrzymujemy listę odbiorców (recipients) w formie obiektu lub tabeli.

Często jeżeli odbiorców jest więcej nie wyświetlają się oni w całości.

Dodatkowo jeżeli wyniki chcemy zapisać do pliku wówczas również nie otrzymamy informacji o odbiorcach a jedynie wpis SystemObject.

Dlatego aby bez problemów wyświetlić lub zapisać wszystkich odbiorców wyszukanych emaili do pliku możemy użyć polecenia join dla obiektów w kolumnie recipients jak poniżej:

[string]::join(",",$_.recipients)

 

Spowoduje to umieszczenie wszystkich odbiorców danego emaila w jednej linii oddzielonych przecinkiem.

Całe polecenie wyszukania emaili wysłanych przez daną osobę będzie wyglądało mniej więcej tak:

Get-TransportServer | Get-MessageTrackingLog -resultsize unlimited-eventid receive | ? {$_.sender -like "john@domain.com"  -and $_.source -eq "STOREDRIVER"} | Select-Object timestamp, sender, messagesubject, @{label="recipients";expression={[string]::join(",",$_.recipients)}} | sort timestamp | ft -auto

 

Wykonanie tego polecenia spowoduje wyświetlenie listy emaili z informacjami o dacie wysłania, nadawcy, temacie oraz odbiorcach.

Aby zapisać ten wynik do pliku możemy użyć: > lub Out-File.

Niestety jeżeli odbiorców będzie zbyt wielu w pliku zostanie zapisana ich niepełna wartość i dodane

Aby wartości zostały zapisane poprawnie zastosować możemy:

Out-String -Width 4096 > D:\logs\emails_sent.txt

 

czyli całe polecenie będzie wyglądało:

Get-TransportServer | Get-MessageTrackingLog -resultsize unlimited-eventid receive | ? {$_.sender -like "john@domain.com"  -and $_.source -eq "STOREDRIVER"} | Select-Object timestamp, sender, messagesubject, @{label="recipients";expression={[string]::join(",",$_.recipients)}} | sort timestamp | ft -auto | Out-String -Width 4096 > D:\logs\emails_sent.txt

 

Exchange 2010 statystyka wysyłanych emaili – messagetrackinglog

emailOstatnio pisaliśmy o tym jak znaleźć wszystkich odbiorców danego emaila:

Exchange MessageTrackingLogs wyszukanie wszystkich odbiorców emaila

 

Teraz przedstawimy skrypt który pomoże nam wygenerować statystykę wysyłanych emaili.

Niemniej jednak nie interesuje nas ilość wszystkich wysyłanych emaili, ich rozmiar, tylko skupimy się na emailach wysyłanych poza naszą organizację Exchange i uzyskamy informację o tym z jakich adresów zostały wysłane, z jakim tematem, ile było tych emaili i do ilu odbiorców zostały przesłane.

Skrypt ten umożliwia uzyskanie informacji o adresach email które wysyłają najwięcej wiadomości na zewnątrz.
Jego działanie oparte jest na sprawdzeniu logów transportowych (TransportLogs) umieszczonych na serwerach Exchange z rolami Hub Transport.

Po otrzymaniu wyników skryptu możemy skorzystać ze skryptu z poprzedniego posta i dowiedzieć się do kogo została wysłana wiadomość.

 

Poniżej przedstawiamy kolejne fragmenty skryptu z opisem działania:

Pierwszy fragment zawiera:

  • definicje obiektów wynikowych z raportami
  • ścieżek do plików przechowujących wszystkie otrzymane wyniki
  • ustawienia do wysłania raportu emailem
  • $MAX_Recipients – liczba odbiorców powyżej której wygenerowany zostanie email z raportem

 

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
Set-AdServerSettings -ViewEntireForest $True

Function New-Array {,$args}

$Report = New-Array
$Report_SMTP = New-Array
$Rep_sum = New-Array
$Rep_SMTP_sum = New-Array

$data = $($((get-date).adddays(-1)).ToString('yyyy.MM.dd'))

#paths to output files
$Out_Rep_file = "d:\Scripts\Logs\Stats\msg_stat_out_$data.csv"
$Out_Rep_sum_file = "d:\Scripts\Logs\Stats\msg_stat_out_sum_$data.csv"

#files with emails with smtp traffic
$Out_Rep_SMTP_file = "d:\Scripts\Logs\Stats\msg_stat_smtp_out_$data.csv"
$Out_Rep_SMTP_sum_file = "d:\Scripts\Logs\Stats\msg_stat_smtp_out_sum_$data.csv"
#file with report attached to email (emails recipients grater than $MAX_Recipients)
$Email_HTML_File = "d:\Scripts\Logs\Stats\Report_outgoing_emails_$data.htm"

#settings for email with report
$mail_from = "exchangereport@domain.com"
$mail_to = "admin@domain.com"
$mail_smtp_host = "smtpserver.domain.local"
$mail_subject = "Report outgoing emails $data"

#variable that defines the threshold for recipients to write to email report
$MAX_Recipients = 100

Continue reading

Exchange MessageTrackingLogs wyszukanie wszystkich odbiorców emaila

Od czasu do czasu potrzebujemy otrzymać listę wszystkich osób do których został wysłany email o danym temacie.

Listę odbiorców w dość prosty sposób możemy uzyskać z transaction logs które umieszczone są na serwerach Exchange z rolami HT.

Oczywiście wcześniej musicie skonfigurować swoje środowisko tak aby logi te były przechowywane przez pare dni na serwerach.

Poniższy skrypt zwraca listę odbiorców, do których został wysłany email o temacie „Test email”, przy czym interesuje nas czas wysłania ostatni dzień.

Ilość dni określamy w zmiennej $DAYS natomiast poszukiwany temat wpisujemy do $SUBJECT.

Skrypt wygląda jak poniżej:

Continue reading

Get-MessageTrackingLog przyspieszenie wykonania

Przeszukiwanie transport logów na wielu serwerach z rolami Hub Transport za pomocą komendy Get-MessageTrackingLog czasami może zająć dużo czasu.

Aby przyśpieszyć całą operację możemy zastosować pewną modyfikację poniższego polecenia:

Get-TransportServer | Get-MessageTrackingLog -resultsize unlimited -start (get-date).adddays(-2) -end (get-date) -eventid Deliver | ? {$_.messagesubject -like "Important *"}

 

W celu przyśpieszenia powyższego polecenia możemy zastosować zdalne zapytanie PowerShell do serwerów HT wykorzystując polecenie Invoke-Command.

Wówczas polecenie będzie miało postać:

Get-TransportServer | Invoke-Command {Get-MessageTrackingLog -resultsize unlimited -start (get-date).adddays(-2) -end (get-date) -eventid Deliver | ? {$_.messagesubject -like "Important *"}}