Email server script

Welcome Forums General PowerShell Q&A Email server script

This topic contains 2 replies, has 2 voices, and was last updated by

2 years, 10 months ago.

  • Author
  • #37402

    Points: 0
    Rank: Member

    Hi Everyone

    We are going through a rebrand at the moment and was asked by my Head of IT to produce a report from exchange 2007 to list out all the SMTP addresses for each user, fairly straight forward task.

    Then he asked me to add extra statistics
    For each email SMTP addresses he wanted to know how many emails were Received from external addresses, Sent to external addresses and received internally.

    The reason for these extra tasks were to do a cleanup of the environment at the same time.

    Below is my code that I have created, just wondering if anyone had comments on the code or better ways to do it.

    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
    # Output File
    $strOutFile = ".\MailboxExport.csv"
    #Gets all mailboxes with 
    $mailboxes = get-recipient -resultsize unlimited | get-mailbox -resultsize unlimited | Select Name, forwardingaddress -ExpandProperty EmailAddresses | select name, SMTPaddress, forwardingaddress
    #Gets message tracking last 30 days count for recieved SMTP items based on external email address 
    $output = @()
    foreach ($mailbox in $mailboxes)
    #Count for Recieved emails from External SMTP Addresses
    $RecievedExternal = Get-MessageTrackingLog -server mail5 -eventid "RECEIVE" -start ((get-date).adddays(-30)) -recipients $mailbox.SMTPaddress | where {$_.source -eq "SMTP" -AND $_.Recipients -eq $mailbox.SMTPaddress} | measure | select count
    #Count for Sent emails to External SMTP Addresses
    $Sent = Get-MessageTrackingLog -server mail5 -eventid "SEND" -start ((get-date).adddays(-30)) -Sender $mailbox.SMTPaddress | where {$_.source -eq "SMTP" -AND $_.Sender -eq $mailbox.SMTPaddress} | measure | select count
    ##Count for Recieved emails on internal server
    $RecievedInternal = Get-MessageTrackingLog -server mail5 -eventid "RECEIVE" -start ((get-date).adddays(-30)) -Recipients $mailbox.SMTPaddress | where {$_.source -eq "STOREDRIVER" -AND $_.Recipients -eq $mailbox.SMTPaddress} | measure | select count
    #Build the custom array
    $output = "" | Select-Object Name, SMTPAddress, Forwardingaddress, RecievedExternal, Sent
    $output.Name = $
    $output.SMTPaddress = $mailbox.SMTPaddress
    $output.forwardingaddress = $mailbox.forwardingaddress
    $output.RecievedExternal = $RecievedExternal.count
    $output.Sent = $Sent.count
    $output.RecievedInternal = $RecievedInternal.count
    #Export to CSV File
    $output | export-csv -Append $strOutFile
  • #37410

    Points: 0
    Rank: Member

    Looks reasonable to me. You might get a slight performance increase, if you're running at least PowerShell v3, by slightly tweaking how you create your objects:

        $output = [pscustomobject] @{
            Name              = $mailbox.Name
            SMTPaddress       = $mailbox.SMTPaddress
            forwardingaddress = $mailbox.forwardingaddress
            RecievedExternal  = $RecievedExternal.count
            Sent              = $Sent.count
            RecievedInternal  = $RecievedInternal.Count
  • #37414

    Points: 0
    Rank: Member

    Thanks for taking the time to review the script Dave, will give that a try.


The topic ‘Email server script’ is closed to new replies.

denizli escort samsun escort muğla escort ataşehir escort kuşadası escort