diff --git a/message-counter.ps1 b/message-counter.ps1 new file mode 100644 index 0000000..e4dcb05 --- /dev/null +++ b/message-counter.ps1 @@ -0,0 +1,41 @@ +<# +.SYNOPSIS + Count the number of received emails in a Microsoft 365 mailbox during a specified time window. + +.DESCRIPTION + This script queries Exchange Online via Microsoft Graph to return the total count of emails + received by a specific mailbox within a given date range. It searches all folders in the mailbox + (including Inbox, subfolders, Junk, and Deleted Items), ensuring that emails moved after delivery + are still included in the count. Drafts are excluded, and self-sent messages from the mailbox + owner are not counted as "received." + + Date boundaries are applied using local time (Eastern Time in this example). + Adjust offsets (-05:00 / -04:00) for daylight savings or your region. + +.PARAMETER $u + The target user’s email address. Example: 'f@d.org' + +.PARAMETER $start + The inclusive start of the time window in ISO 8601 format with time zone offset. + Example: '2025-01-01T00:00:00-05:00' for January 1st, 2025, 12:00 AM ET. + +.PARAMETER $end + The exclusive end of the time window in ISO 8601 format with time zone offset. + Example: '2025-02-01T00:00:00-05:00' for February 1st, 2025, 12:00 AM ET. + +.OUTPUTS + Returns a single integer representing the count of received messages. + +.NOTES + Requirements: + - Microsoft.Graph PowerShell module + - Connect-MgGraph with Mail.Read delegated permission (if signed in as the user) + OR Mail.Read application permission (with admin consent) if run as a service. + + Example to install module: Install-Module Microsoft.Graph + Example to connect: Connect-MgGraph -Scopes Mail.Read + + (c) 2025 Robbie Ferguson. All rights reserved. +#> + +$u='mailbox@domain.com';$start='2025-01-01T00:00:00-05:00';$end='2025-02-01T00:00:00-05:00';$c=0; Get-MgUserMessage -UserId $u -Filter "receivedDateTime ge $start and receivedDateTime lt $end and isDraft eq false and (from/emailAddress/address ne '$u')" -CountVariable c -ConsistencyLevel eventual -PageSize 1 | Out-Null; $c \ No newline at end of file