Экспорт почтовых ящиков Microsoft 365 с помощью Microsoft Graph PowerShell


Командлет Get-MgUserMessageContent с Microsoft Graph PowerShell предоставляет метод экспорта электронных писем на локальный компьютер в формате EML, который может прочитать каждый. В этом посте я покажу вам, как массово экспортировать электронные письма из любого почтового ящика Exchange Online (M365) в вашей организации. Кроме того, как отфильтровать экспорт электронных писем в определенном диапазоне дат и с определенной информацией в строке темы.

Требования

Этот скрипт использует следующие модули Microsoft Graph PowerShell:

  • Microsoft.Graph.Authentication
  • Microsoft.Graph.Mail

Вам также потребуется учетная запись глобального администратора в вашем клиенте, чтобы дать согласие на следующие разрешения:

  • Mail.Read

Для получения поддержки по этим требованиям см. мою публикацию: Как установить модуль Microsoft Graph PowerShell.

Разрешение Mail.Read доступно только в контексте приложения. Для этого вам потребуется зарегистрировать новое приложение в Microsoft Entra и подключиться к нему в контексте приложения через PowerShell. См. мой пост «Подключение к Microsoft Graph PowerShell с секретом клиента».

Резервное копирование почтового ящика Exchange Online

Резервное копирование электронной почты Exchange Online с помощью Microsoft Graph PowerShell следует выполнять только в определенных сценариях. Например, пользователь покинул вашу организацию, и вам нужна копия файлов пользователя в формате .eml. Или вам нужно загрузить копию электронных писем пользователей за определенную дату.

Вы можете использовать приведенный ниже скрипт, чтобы загрузить копию всех писем в почтовом ящике пользователя (включая вложения к электронным письмам).

## Define information here
$ApplicationId = ""
$SecuredPassword = ""
$tenantID = ""
$UserID "" #Example: [email 
$filepath = "" #Example: C:\temp\

#Connect to Microsoft Graph
$SecuredPasswordPassword = ConvertTo-SecureString `
-String $SecuredPassword -AsPlainText -Force
$ClientSecretCredential = New-Object `
-TypeName System.Management.Automation.PSCredential `
-ArgumentList $ApplicationId, $SecuredPasswordPassword
Connect-MgGraph -TenantId $tenantID -ClientSecretCredential $ClientSecretCredential

#Store all emails
##Add filter if required
$messages = Get-MgUserMessage -UserId $userid -all

#Download all emails
Foreach ($message in $messages) {
    $file = ($File = "$($message.subject) $($message.ReceivedDateTime).eml").Split([IO.Path]::GetInvalidFileNameChars()) -join '_'
    $outfile = $filepath + $file
    try {
        Get-MgUserMessageContent -UserId $userid -MessageId $message.id -OutFile $outfile
    }
    Catch {
        LogWrite "Unable to export " $message.Subject
    }
}

Определение диапазона дат для резервного копирования электронной почты Exchange Online

Если вы хотите экспортировать электронные письма только за определенный диапазон дат, вы можете использовать фильтрующие запросы, чтобы ограничить результаты.

Ниже я объединил два фильтра, используя оператор AND, чтобы экспортировать только электронные письма в период с 1 по 9 января.

Get-MgUserMessage -UserId $userid -all `
-filter "ReceivedDateTime ge 2024-01-01 AND ReceivedDateTime le 2024-01-09"

Этот фильтр можно расширить еще больше, включив в него сообщения, в строке темы которых есть определенная строка текста. Например:

Я использовал обратную галочку `, чтобы сделать ее читабельной без прокрутки.

Get-MgUserMessage -UserId $userid -all `
-filter "ReceivedDateTime ge 2024-01-01 AND ReceivedDateTime le 2024-01-09 `
AND contains(Subject, 'New Device')" `
| Select Subject, ReceivedDateTime

Подведение итогов

Массовую загрузку файлов сообщений электронной почты не следует рассматривать как единственное «резервное» решение для хранения почты для пользователей, покинувших бизнес. Вам все равно следует рассмотреть возможность использования стороннего решения для резервного копирования и/или сохранения почтового ящика как общего почтового ящика. Тем не менее, он предоставляет удобное решение для экспорта массовых писем в случае необходимости резервного копирования, расследования или соблюдения требований.