Public/Graph/Get-GraphMailFolderMessage.ps1
function Get-GraphMailFolderMessage { [CmdletBinding()] param ( [Parameter()] [ValidateSet('archive', 'clutter', 'conflicts', 'conversationhistory', 'DeletedItems', 'drafts', 'Inbox', 'junkemail', 'localfailures', 'outbox', 'recoverableitemsdeletions', 'scheduled', 'searchfolders', 'sentitems', 'serverfailures', 'syncissues')] $WellKnownFolder, [Parameter()] [datetime] $MessagesOlderThan, [Parameter()] [datetime] $MessagesNewerThan, [Parameter()] [string] [Alias('_Message_Body')] $Body, [Parameter()] [Alias('_Message_Subject')] [string] $Subject, [Parameter()] [Alias('_Message_From')] [string] $From, [Parameter()] [Alias('_Message_CC')] [string] $CC, [Parameter()] [Alias('Count')] $Top, [Parameter()] [string[]] $FolderList, [Parameter(ValueFromPipeline)] $MailboxList ) begin { if ($MessagesOlderThan -and $MessagesNewerThan) { Write-Host 'Choose only one date, MessagesOlderThan OR MessagesNewerThan' -ForegroundColor Red return } $filterstring = [System.Collections.Generic.List[string]]::new() if ($MessagesOlderThan) { $filter = "`$filter=ReceivedDateTime le {0}" -f $MessagesOlderThan.ToUniversalTime().ToString('O') $filterstring.Add($filter) } elseif ($MessagesNewerThan) { $filter = "`$filter=ReceivedDateTime ge {0}" -f $MessagesNewerThan.ToUniversalTime().ToString('O') $filterstring.Add($filter) } if ($Subject) { $filter = "`$search=""Subject:{0}""" -f $Subject $filterstring.Add($filter) } if ($Body) { $filter = "`$search=""Body:{0}""" -f $Body $filterstring.Add($filter) } if ($From) { $filter = "`$search=""From:{0}""" -f $From $filterstring.Add($filter) } if ($CC) { $filter = "`$search=""CC:{0}""" -f $CC $filterstring.Add($filter) } if ($Top) { $filterstring.Add(('`$top={0}' -f $Top)) } if ($filterstring) { $Uri = '/messages?{0}' -f (@($filterstring) -ne '' -join '&') } else { $Uri = '/messages' } } process { foreach ($Mailbox in $MailboxList) { Write-Host "`r`nMailbox: $($Mailbox.UserPrincipalName) " -ForegroundColor Green -NoNewline :what foreach ($WellKnownFolder in $FolderList) { $RestSplat = @{ Uri = "https://graph.microsoft.com/v1.0/users/{0}/mailFolders('{1}'){2}" -f $Mailbox.UserPrincipalName, $WellKnownFolder, $Uri Headers = @{ "Authorization" = "Bearer $Token" } Method = 'Get' ErrorAction = 'Stop' } $i = if ($Top) { $Top } else { 10000000 } do { if ([datetime]::UtcNow -ge $Script:TimeToRefresh) { Connect-PoshGraphRefresh } try { $MessageList = Invoke-RestMethod @RestSplat -Verbose:$false if ($MessageList.'@odata.nextLink' -match 'skip') { $Next = $MessageList.'@odata.nextLink' } else { $Next = $null } $RestSplat = @{ Uri = $Next Headers = @{ "Authorization" = "Bearer $Token" } Method = 'Get' ErrorAction = 'Stop' } foreach ($Message in $MessageList.Value) { $i -= 1 [PSCustomObject]@{ DisplayName = $Mailbox.DisplayName UserPrincipalName = $Mailbox.UserPrincipalName Mail = $Mailbox.Mail Folder = $WellKnownFolder SenderName = $Message.Sender.emailaddress.name SenderAddress = $Message.Sender.emailaddress.address FromName = $Message.from.emailaddress.name FromAddress = $Message.from.emailaddress.address replyTo = $Message.replyTo toRecipientsName = $Message.toRecipients.emailaddress.name toRecipientsAddress = $Message.toRecipients.emailaddress.address Subject = $Message.Subject BodyPreview = $Message.BodyPreview ccRecipientsName = $Message.ccRecipients.emailaddress.name ccRecipientsAddress = $Message.ccRecipients.emailaddress.address bccRecipientsName = $Message.bccRecipients.emailaddress.name bccRecipientsAddress = $Message.bccRecipients.emailaddress.address Body = $Message.Body.content ReceivedDateTime = $Message.ReceivedDateTime sentDateTime = $Message.sentDateTime createdDateTime = $Message.createdDateTime lastModifiedDateTime = $Message.lastModifiedDateTime Id = $Message.Id ParentFolderId = $Message.parentFolderId } } } catch { Write-Host "Not Found" -ForegroundColor Red -NoNewline break what } } until (-not $next -or $i -lt 1) } } } } |