functions/mailItems/Search-EXRMessage.ps1
function Search-EXRMessage { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [string]$MailboxName, [Parameter(Position=1, Mandatory=$false)] [psobject]$AccessToken, [Parameter(Position=2, Mandatory=$false)] [string]$WellKnownFolder, [Parameter(Position=3, Mandatory=$false)] [string]$FolderPath, [Parameter(Position=4, Mandatory=$false)] [switch]$ReturnSize, [Parameter(Position=5, Mandatory=$false)] [string]$SelectProperties, [Parameter(Position=6, Mandatory=$false)] [string]$MessageId, [Parameter(Position=7, Mandatory=$false)] [string]$Subject, [Parameter(Position=7, Mandatory=$false)] [string]$SubjectKQL, [Parameter(Position=8, Mandatory=$false)] [string]$SubjectContains, [Parameter(Position=8, Mandatory=$false)] [string]$SubjectStartsWith, [Parameter(Position=7, Mandatory=$false)] [string]$BodyKQL, [Parameter(Position=8, Mandatory=$false)] [string]$BodyContains, [Parameter(Position=9, Mandatory=$false)] [string]$KQL, [Parameter(Position=9, Mandatory=$false)] [string]$From, [Parameter(Position=11, Mandatory=$false)] [string]$AttachmentKQL, [Parameter(Position=12, Mandatory=$false)] [DateTime]$ReceivedtimeFromKQL, [Parameter(Position=13, Mandatory=$false)] [DateTime]$ReceivedtimeToKQL, [Parameter(Position=14, Mandatory=$false)] [DateTime]$ReceivedtimeFrom, [Parameter(Position=15, Mandatory=$false)] [DateTime]$ReceivedtimeTo, [Parameter(Position=16, Mandatory=$false)] [int]$First, [Parameter(Position=17, Mandatory=$false)] [PSCustomObject]$PropList, [Parameter(Position=18, Mandatory=$false)] [switch]$ReturnStats, [Parameter(Position=19, Mandatory=$false)] [switch]$ReturnAttachments, [Parameter(Position=20, Mandatory=$false)] [string]$Filter, [Parameter(Position=21, Mandatory=$false)] [switch]$ReturnFolderPath, [Parameter(Position=24, Mandatory=$false)] [switch]$ReturnSentiment, [Parameter(Position=25, Mandatory=$false)] [switch]$ReturnEntryId, [Parameter(Position=26, Mandatory=$false)] [switch]$BatchReturnItems, [Parameter(Position=27, Mandatory=$false)] [switch]$ReturnInternetMessageHeaders, [Parameter(Position=28, Mandatory=$false)] [switch]$ProcessAntiSPAMHeaders ) Process { if($AccessToken -eq $null) { $AccessToken = Get-ProfiledToken -MailboxName $MailboxName if($AccessToken -eq $null){ $AccessToken = Get-EXRAccessToken -MailboxName $MailboxName } } if(![String]::IsNullOrEmpty($KQL)){ $Search = $KQL } if([String]::IsNullOrEmpty($MailboxName)){ $MailboxName = $AccessToken.mailbox } if(![String]::IsNullOrEmpty($MessageId)){ $Filter = "internetMessageId eq '" + $MessageId + "'" } if(![String]::IsNullOrEmpty($Subject)){ if([String]::IsNullOrEmpty($Filter)){ $Filter = "Subject eq '" + $Subject + "'" } else{ $Filter += " And Subject eq '" + $Subject + "'" } } if(![String]::IsNullOrEmpty($SubjectContains)){ if([String]::IsNullOrEmpty($Filter)){ $Filter = "contains(Subject,'" + $SubjectContains + "')" } else{ $Filter += " And contains(Subject,'" + $SubjectContains + "')" } } if(![String]::IsNullOrEmpty($SubjectStartsWith)){ if([String]::IsNullOrEmpty($Filter)){ $Filter = "startwith(Subject,'" + $SubjectStartsWith + "')" } else{ $Filter += " And startwith(Subject,'" + $SubjectStartsWith + "')" } } if(![String]::IsNullOrEmpty($From)){ if([String]::IsNullOrEmpty($Filter)){ $Filter = "from/emailAddress/address eq '" + $From + "'" } else{ $Filter += " And from/emailAddress/address eq '" + $From + "'" } } if(![String]::IsNullOrEmpty($SubjectKQL)){ $Search = "Subject: \`"" + $SubjectKQL + "\`"" } if(![String]::IsNullOrEmpty($BodyContains)){ $Filter = "contains(Body,'" + $BodyContains + "')" } if(![String]::IsNullOrEmpty($AttachmentKQL)){ if([String]::IsNullOrEmpty($Search)){ $Search = "attachment: '" + $AttachmentKQL + "'" } else{ $Search += " And attachment: '" + $AttachmentKQL + "'" } } if(![String]::IsNullOrEmpty($ReceivedtimeFrom)){ if([String]::IsNullOrEmpty($Filter)){ $Filter = "receivedDateTime ge " + $ReceivedtimeFrom.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") } else{ $Filter += " And receivedDateTime ge " + $ReceivedtimeFrom.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") } } if(![String]::IsNullOrEmpty($ReceivedtimeTo)){ if([String]::IsNullOrEmpty($Filter)){ $Filter = "receivedDateTime le " + $ReceivedtimeTo.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") } else{ $Filter += " And receivedDateTime le " + $ReceivedtimeTo.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") } } if([String]::IsNullOrEmpty($WellKnownFolder)){ $WellKnownFolder = "AllItems" } if(![String]::IsNullOrEmpty($BodyKQL)){ if([String]::IsNullOrEmpty($Search)){ $Search = "Body:\`"" + $BodyKQL + "\`"" } else{ $Search += " And Body:\`"" + $BodyKQL + "\`"" } } if($ReceivedtimeFromKQL -ne $null -band $ReceivedtimeToKQL -ne $null){ if([String]::IsNullOrEmpty($Search)){ $Search = "Received:" + $ReceivedtimeFromKQL.ToString("yyyy-MM-dd") + ".." + $ReceivedtimeToKQL.ToString("yyyy-MM-dd") } else{ $Search += " And Received:" + $ReceivedtimeFromKQL.ToString("yyyy-MM-dd") + ".." + $ReceivedtimeToKQL.ToString("yyyy-MM-dd") } } if($First -ne 0){ $TopOnly = $true $Top = $First } else{ $TopOnly = $false } if($ReturnStats.IsPresent){ $DetailedStats = "" | Select TotalItems,TotalSize,TotalFolders,FolderStats $DetailedStats.TotalItems = 0 $DetailedStats.TotalSize = 0 $DetailedStats.TotalFolders = 0 $DetailedStats.FolderStats = New-Object 'system.collections.generic.dictionary[[string],[Int32]]' if([String]::IsNullOrEmpty($FolderPath)){ Get-EXRWellKnownFolderItems -MailboxName $MailboxName -AccessToken $AccessToken -WellKnownFolder $WellKnownFolder -ReturnSize:$true -SelectProperties $SelectProperties -Search $Search -Filter $Filter -Top $Top -OrderBy $OrderBy -TopOnly:$TopOnly -PropList $PropList -ReturnFolderPath -ReturnStats -ReturnAttachments:$ReturnAttachments.IsPresent -ReturnInternetMessageHeaders:$ReturnInternetMessageHeaders.IsPresent -ProcessAntiSPAMHeaders:$ProcessAntiSPAMHeaders.IsPresent | ForEach-Object{ $DetailedStats.TotalItems++ $DetailedStats.TotalSize += $_.Size } } return $DetailedStats } else{ if([String]::IsNullOrEmpty($FolderPath)){ Get-EXRWellKnownFolderItems -MailboxName $MailboxName -AccessToken $AccessToken -WellKnownFolder $WellKnownFolder -ReturnSize:$ReturnSize.IsPresent -SelectProperties $SelectProperties -Search $Search -Filter $Filter -Top $Top -OrderBy $OrderBy -TopOnly:$TopOnly -PropList $PropList -ReturnFolderPath -ReturnStats -ReturnAttachments:$ReturnAttachments.IsPresent -ReturnInternetMessageHeaders:$ReturnInternetMessageHeaders.IsPresent -ProcessAntiSPAMHeaders:$ProcessAntiSPAMHeaders.IsPresent } else{ Get-EXRFolderItems -MailboxName $MailboxName -AccessToken $AccessToken -FolderPath $FolderPath -ReturnSize:$ReturnSize.IsPresent -SelectProperties $SelectProperties -Search $Search -Filter $Filter -Top $Top -OrderBy $OrderBy -TopOnly:$TopOnly -PropList $PropList -ReturnAttachments:$ReturnAttachments.IsPresent -ReturnInternetMessageHeaders:$ReturnInternetMessageHeaders.IsPresent -ProcessAntiSPAMHeaders:$ProcessAntiSPAMHeaders.IsPresent } } } } |