Statystyki z Outlooka via Powershell

Jakiś czas temu znajomy na FB zaproponował statystyki maili outlook, a dokładniej chodzi o ilość maili odebranych i wysłanych oraz średni czas odpowiedzi na mailie. Było to jakiś czas temu jednak wtedy brakowało mi czasu na spokojne skryptowanie w Powershell’u. Dziś jednak skrypt napisany – możliwe że będą konieczne poprawki jednak podstawa już jest 🙂

#------------------------------------
#Script:
#Author: Damian Garbus
#Date: 17-10-2013
#------------------------------------

param(
 [string]$AdresKonta,
 [string]$DniWstecz,
 [int]$CzasNaMail

 )

 If(-not $AdresKonta)
 {
 Write-Host "Musisz podać twój adres email...np.: .\start.ps1 -Adreskonta mail@domena.pl"
 break
 }

$outlook = new-object -com outlook.application
$ns = $outlook.GetNameSpace("MAPI")
$konto = $ns.Folders |? {$_.Name -eq $AdresKonta}
$skrz_odbiorcza = $konto.Folders |? {$_.Name -eq "Skrzynka odbiorcza"}
$skrz_nadawcza = $konto.Folders |? {$_.Name -eq "Elementy wysłane"}

if(-not $DniWstecz){$DniWstecz = 7}

Write-Host "Pobieranie maili odebranych z ostatnich $DniWstecz dni..."
$odebrane = $skrz_odbiorcza.Items | ? {$_.ReceivedTime -gt (Get-Date).AddDays(-$DniWstecz)} | Select-Object -Property  SenderName,ConversationID,ReceivedTime
Write-Host "Pobieranie maili wysłanych z ostatnich $DniWstecz dni..."
$wyslane = $skrz_nadawcza.Items |?{$_.SentOn -gt (Get-Date).AddDays(-$DniWstecz)} | Select-Object -Property To,ConversationID,SentOn

function ResponseTime
{
    Write-Host "---------------------------------------------"
    Write-Host "---------------------------------------------"
    Foreach ($mail in $odebrane)
    {
        $odebrany_mail_ID = $mail.ConversationID

        Foreach ($wys in $wyslane)
        {
            $wyslany_mail_ID = $wys.ConversationID
            if($odebrany_mail_ID -eq $wyslany_mail_ID -and $wys.SentOn -gt $mail.ReceivedTime)
            {
                $a = $mail.ReceivedTime
                $b = $wys.SentOn
                $c=$b-$a
                $d = $c.TotalSeconds
                $suma_czasu = $suma_czasu + $d
                $il_odpowiedz = $il_odpowiedz+1
                Break
            }
        }

    }

    $sredni_czas_sek = $suma_czasu/$il_odpowiedz
    $sredni_czas = New-TimeSpan -Seconds $sredni_czas_sek
    Write-Host "--------------------"
    Write-Host "Twoj Sredni czas odpowiedzi na maila to:" $sredni_czas |select Days,Hours,Minutes,Seconds
    Write-Host "Czas jest podawany w formacie HH:MM:SS"
}

function StatystykaMaili
{
    Write-Host "---------------------------------------------"
    Write-Host "---------------------------------------------"
    Write-Host "Poniżej statystyka maili z ostatnich $DniWstecz dni..."
    $l_maili_odebranych = $odebrane.Count
    $l_maili_wyslanych = $wyslane.Count
    Write-Host "Ilość Maili odebranych: $l_maili_odebranych "
    Write-Host "Ilosc maili wyslanych: $l_maili_wyslanych"
    Write-Host "Orentacyjny czas poswiecony na pisanie jednego maila: $CzasNaMail "
    $pisanie_czas = $wyslane.Count*$CzasNaMail
    $WriteTime = New-TimeSpan -Seconds $pisanie_czas
    Write-Host "Ilość czasu poświęconego na pisane maili: $WriteTime "
    Write-Host "Czas jest podawany w formacie HH:MM:SS"

}

function Stat_rec_mail
{
    Write-Host "---------------------------------------------"
    Write-Host "---------------------------------------------"
    Write-Host "Poniżej statystyka maili odebranych..."
    $odebrane | Group-Object -Property SenderName -NoElement | Sort-Object count
    Write-Host "`n Poniżej statystyka maili wyslanych...`n"
    $wyslane | Group-Object -Property To -NoElement | Sort-Object count   
}

Write-Host "Trwa wyliczanie statystyk..."
StatystykaMaili
Stat_rec_mail
ResponseTime

Jak widać skrypt zaczyna się bardzo podobnie jak poprzednie z tej serii czyli Automatyzacja pracy z Microsoft Outlook oraz How to Add all contacts from old mails to Outlook Contacts. Podstawą jest połączenie się skryptem do Outlook’a 🙂

A co ten skrypt właściwie robi???

Skrypt ten pobiera maile z X dni wstecz i oblicza statystyki na ich podstawie. Pierwsze co wykonuje to liczy całość maili jaka została odebrana i wysłana oraz przy podaniu orientacyjnego czasu wyliczy nam również ile czas poświęciliśmy na samo pisanie maili. Drugą opcją jaką nam wyliczy jest ilość maili odebranych i wysłanych per współpracownik/znajomy. Oraz trzecią opcją jest obliczenie średniego czasu po jakim odpowiadamy na maila (skrypt sprawdza tylko maile na które odpowiedzieliśmy).

Uruchomienie.

Skrypt kopiujemy do notatnika i zapisujemy jako „Start.ps1”. Następnie odpalamy Powershella, przechodzimy do lokalizacji gdzie zapisaliśmy skrypt i podajemy:

.\Start.ps1 -AdresKonta mail@domena.pl -DniWstecz X -CzasNaMail Y

-AdresKonta –  to konto dla jakiego chcecie zrobić statystyki.-DniWstecz – to ilość dni z jakich chcecie zrobić statystyki
-CzasNaMaila – Ile średnio czasu poświęcacie na maila

A po co to wszystko???

Jeśli zastanawiacie się do czego to może służyć to już Wam podpowiadam. Wyobraźcie sobie że przerzucacie X maili dziennie przy czym pracujecie 8h. Nie chcielibyście wiedzieć ile czasu poświęcacie na samo pisanie maili? Ja chciałem i to wiem 🙂

Pozdróweczka.

Damian.

  • Tadeusz Zientecki

    W dechę pomysł, aż się boję sprawdzić.

    • Sprawdzaj sprawdzaj 🙂 Najwyżej komuś przestaniesz odpisywać na maile 🙂