functions/Batch/Get-EXRBatchItems.ps1
function Get-EXRBatchItems { [CmdletBinding()] param ( [Parameter(Position = 0, Mandatory = $false)] [string] $MailboxName, [Parameter(Position = 1, Mandatory = $false)] [psobject] $AccessToken, [Parameter(Position = 2, Mandatory = $false)] [psobject] $Items, [Parameter(Position = 3, Mandatory = $false)] [psobject] $SelectProperties, [Parameter(Position = 4, Mandatory = $false)] [psobject] $PropList, [Parameter(Position = 5, Mandatory = $false)] [psobject] $URLString, [Parameter(Position = 6, Mandatory = $false)] [switch] $ReturnAttachments, [Parameter(Position = 7, Mandatory = $false)] [switch] $ProcessAntiSPAMHeaders, [Parameter(Position = 8, Mandatory = $false)] [switch] $RestrictProps, [Parameter(Position = 9, Mandatory = $false)] [switch] $ChildFolders ) Process { if ($AccessToken -eq $null) { $AccessToken = Get-ProfiledToken -MailboxName $MailboxName if ($AccessToken -eq $null) { $AccessToken = Get-EXRAccessToken -MailboxName $MailboxName } } if ([String]::IsNullOrEmpty($MailboxName)) { $MailboxName = $AccessToken.mailbox } $HttpClient = Get-HTTPClient -MailboxName $MailboxName $RequestURL = "https://graph.microsoft.com/v1.0/`$batch" $RequestContent = "{`r`n`"requests`": [" $itemCount = 1 foreach ($Item in $Items) { $ItemURI = $URLString + "('" + $Item.Id + "')" if ($ChildFolders.IsPresent) { $ItemURI += "/childfolders/?`$Top=1000" } $boolSelectProp = $false if ($RestrictProps.IsPresent) { if (![String]::IsNullOrEmpty($SelectProperties)) { $ItemURI += "/?" + $SelectProperties $boolSelectProp = $true } } if ($PropList -ne $null) { $Props = Get-EXRExtendedPropList -PropertyList $PropList -AccessToken $AccessToken if ($boolSelectProp) { $ItemURI += "`&" } else { if (!$ItemURI.Contains("/?")) { $ItemURI += "/?" } } if ($ChildFolders.IsPresent) { $ItemURI += "`&" } $ItemURI += "`$expand=SingleValueExtendedProperties(`$filter=" + $Props + ")" } if ($itemCount -ne 1) {$RequestContent += ",`r`n"} if($itemCount -eq 1){ $RequestContent += "{`r`n`"id`": `"" + $itemCount + "`",`r`n`"method`": `"GET`"," }else{ $RequestContent += "{`r`n`"id`": `"" + $itemCount + "`",`r`n`"dependsOn`": [ `"" + ($itemCount-1) +"`" ],`r`n`"method`": `"GET`"," } $RequestContent += "`"url`": `"" + $ItemURI + "`"`r`n }" $itemCount++ } $RequestContent += "`r`n]`r`n}" $JSONOutput = Invoke-RestPOST -RequestURL $RequestURL -HttpClient $HttpClient -AccessToken $AccessToken -MailboxName $MailboxName -Content $RequestContent foreach ($BatchItem in $JSONOutput.responses) { Expand-ExtendedProperties -Item $BatchItem.Body Expand-MessageProperties -Item $BatchItem.Body if ($ProcessAntiSPAMHeaders.IsPresent) { Invoke-EXRProcessAntiSPAMHeaders -Item $BatchItem.Body } if ($ReturnAttachments.IsPresent -band $Message.hasAttachments) { $AttachmentNames = @() $AttachmentDetails = @() Get-EXRAttachments -MailboxName $MailboxName -AccessToken $AccessToken -ItemURI $Message.ItemRESTURI | ForEach-Object { $AttachmentNames += $_.name $AttachmentDetails += $_ } add-Member -InputObject $BatchItem.Body -NotePropertyName AttachmentNames -NotePropertyValue $AttachmentNames add-Member -InputObject $BatchItem.Body -NotePropertyName AttachmentDetails -NotePropertyValue $AttachmentDetails } Write-Output $BatchItem.Body } } } |