Scenario: You want to move messages from one mailbox folder to another
Prerequisites: You already have the following configured:
–Registered App in Azure: An Azure Registered app to connect to with Application Permissions for Mail.Read, Mail.ReadWrite, Mail.ReadBasic.All, and Mail.Send. (Not all permissions listed may be necessary for the specific function below)
–Bearer Authentication Token: A method for pulling back a bearer token and storing it to pass Authorization into your RestAPI package (See my previous post about get-accesstoken). The get-accesstoken authenticates against your Registered App in Azure.
Scriptlets:
#1. Build $mbx
$mbx = "steve@steveman.com"
#2. Build your $AppURI of the source location of the mailbox folder items
#Multiple Examples:
$appuri = "https://graph.microsoft.com/v1.0/users/$mbx/mailfolders/inbox/Messages"
$appuri = "https://graph.microsoft.com/v1.0/users/$mbx/mailfolders/AAMkADY3ODhkMDNlLTRjM2YtNDJjYi04YTkzLTFmNjFhYTcyMjA2NwAuAAAAAAAM5kRh6DylRZ4XsImGGVClAQA0fvQp6d6ET6JezCAd8xOWAAFrER8_AAA=/Messages"
$appuri = "https://graph.microsoft.com/v1.0/users/$mbx/mailfolders/RecoverableItemsDiscoveryHolds/Messages"
$appuri = "https://graph.microsoft.com/v1.0/users/$mbx/mailfolders('RecoverableItemsPurges')/Messages"
#3. Find All messages in that source folder
$messages = @()
Do{
"Running $appUri"
$RestSplat = @{
URI = $appuri
Headers = $(get-accesstoken)
Method = 'GET'
ContentType = "application/json"
}
$Tempresults = Invoke-RestMethod @RestSplat
$messages += $tempresults.value
$appuri = $tempresults."@odata.NextLink"
}While($appuri -ne $null)
#Display your Messages if you want to see
$Messages
#4. Move the messages you found in the step above to the destination folder
#Build a $Params Variable with the folderID we want to pass to
#You can use a Base64 ID
$params = @{
DestinationId = "AAMkADY3ODhkMDNlLTRjM2YtNDJjYi04YTkzLTFmNjFhYTcyMjA2NwAuAAAAAAAM5kRh6DylRZ4XsImGGVClAQA0fvQp6d6ET6JezCAd8xOWAAFrER8_AAA="
} | Convertto-Json
#Or use the name of a common folder
$params = @{
DestinationId = "Inbox"
} | Convertto-Json
#Move the Messages
$c = 0
$T = $messages.id.count
$messages.id | %{
$m = $_
$c++
"$c / $t : Moving $M"
$appuri = "https://graph.microsoft.com/v1.0/users/$mbx/messages/$m/move"
$RestSplat = @{
URI = $appuri
Headers = $(get-accesstoken)
Method = 'POST'
ContentType = "application/json"
Body = $params
}
$move = Invoke-RestMethod @RestSplat
}