Microsoft Graph PowerShell ile Microsoft 365 Posta Kutularını Dışa Aktarma


Microsoft Graph PowerShell'e sahip Get-MgUserMessageContent cmdlet'i, e-postaları herkesin okuyabileceği .eml biçiminde yerel makinenize aktarmak için bir yöntem sağlar. Bu yazıda, kuruluşunuzdaki herhangi bir Exchange Online (M365) posta kutusundan e-postaları nasıl toplu olarak dışarı aktaracağınızı göstereceğim. Ayrıca, belirli bir tarih aralığında ve konu satırında belirli bilgiler bulunan e-postalar için dışa aktarmanın nasıl filtreleneceği.

Gereksinimler

Bu betik aşağıdaki Microsoft Graph PowerShell modüllerini kullanır:

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

Ayrıca aşağıdaki izinlere izin vermek için kiracınızda bir Genel Yönetici hesabına ihtiyacınız olacaktır:

  • Posta.Oku

Bu gereksinimlerle ilgili destek için şu yazıma bakın: Microsoft Graph PowerShell Modülü Nasıl Kurulur.

Mail.Read izni yalnızca uygulama bağlamında kullanılabilir. Bunun için Microsoft Entra'ya yeni bir uygulama kaydetmeniz ve uygulama bağlamında ona PowerShell aracılığıyla bağlanmanız gerekecektir. Bir İstemci Sırrı ile Microsoft Graph PowerShell'e Bağlanma yazıma bakın.

Exchange Online Posta Kutusunu Yedekleme

Exchange Online e-postalarının Microsoft Graph PowerShell kullanılarak yedeklenmesi yalnızca belirli senaryolarda yapılmalıdır. Örneğin, bir kullanıcı kuruluşunuzdan ayrıldı ve kullanıcının dosyalarının .eml biçiminde bir kopyasına ihtiyacınız var. Veya bir kullanıcının belirli bir tarih arasındaki e-postalarının bir kopyasını indirmeniz gerekir.

Kullanıcının posta kutusundaki tüm e-postaların (e-posta ekleri dahil) bir kopyasını indirmek için aşağıdaki komut dosyasını kullanabilirsiniz.

## 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 e-postalarını yedeklemek için bir tarih aralığı tanımlama

Yalnızca belirli bir tarih aralığı arasındaki e-postaları dışa aktarmak istiyorsanız sonuçlarınızı sınırlamak için filtre sorgularını kullanabilirsiniz.

Aşağıda, yalnızca 1 Ocak ile 9 Ocak arasındaki e-postaları dışa aktarmak için AND operatörünü kullanarak iki filtreyi birleştirdim.

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

Bu filtre, konu satırında belirli bir metin dizisine sahip mesajları içerecek şekilde daha da genişletilebilir. Örneğin:

Kaydırmadan okunabilir hale getirmek için ` geri işaretini kullandım.

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

Kapanıyor

E-posta mesajı dosyalarının toplu olarak indirilmesi, işten ayrılan kullanıcılar için postaların depolanmasına yönelik tek 'yedek' çözüm olarak düşünülmemelidir. Yine de 3. taraf bir yedekleme çözümü düşünmelisiniz ve/veya posta kutusunu paylaşılan bir posta kutusu olarak tutmalısınız. Ancak yedekleme, inceleme veya uyumluluk nedeniyle toplu e-postaların dışa aktarılması için uygun bir çözüm sunar.

İlgili makaleler