PowerShell ile Exchange Online'a Geçiş


Posta kutularının Exchange'den Exchange Online'a taşınması iki şekilde gerçekleştirilir; Geçişi komut dosyaları veya tek satırlıklar yoluyla çalıştırmak için Exchange Yönetim Merkezi'nin web arayüzünü kullanarak veya PowerShell'i kullanarak. Her iki yöntem de bu amaca uygundur ve çoğu geçiş, her iki yöntemle de mükemmel şekilde çalışır.

Bu doğru olsa da Microsoft, bazı geçişler için mükemmel olmayan bir deneyim sağlayabilecek bazı sınırlamalar getirmiştir. Örneğin, Exchange Yönetim Merkezi'ndeki geçiş toplu işlemleri 100 ile sınırlıdır ve büyük bir geçiş söz konusu olduğunda bu kısıtlama, toplu işlerin nasıl yönetildiğine bağlı olarak sınırlayıcı olabilir. Buna, Yönetim Merkezi'nin zaman zaman nispeten tutarsız deneyimini de ekleyince, geçiş işlemini gerçekleştirmek için PowerShell'in kullanılması bir yönetici için daha verimli ve duyarlı olabilir. Bu iki bölümlük blog dizisinde, bazı önkoşul kontrolleri ve raporlama da dahil olmak üzere, geçişin baştan sona nasıl ele alınacağını ele alacağız.

Ön Koşul Kontrolü

Posta kutularını Exchange Online'a taşımak, posta kutusu için yeni bir geçişi başlatmak kadar basit olabilir, ancak bazı kuruluşlar için posta kutusu taşıma isteğinin başarısız olmasına neden olabilecek eski yapılandırmalar veya kurulumlar vardır. Artık ihtiyaç duyulmayan, Exchange'de Kabul Edilen Etki Alanları olarak tanımlanmayan veya Exchange Online'da yapılandırılmayan, bir posta kutusunda proxy adresi oluşturabilecek e-posta etki alanlarından bahsediyoruz.

Gerçekleştirilebilecek diğer bir kontrol, bir posta kutusunun Kullanıcı Asıl Adının (UPN) ve Birincil SMTP Adresinin hizalanmasıdır; Microsoft'un rehberliği bu iki değerin eşleşmesi gerektiği yönündedir. Bunların her biri bir hamlenin engelleyicisi olabilir.

Ek olarak, Saklama Politikaları ve Davaya İlişkin Bekletmeler, taşıma sürecini karmaşıklaştırabilir. Bunların her biri, geçiş öncesinde belgelenebilir ve bazı öngörülerle geçiş sonrasında yapılandırılabilir. Exchange Online'da 150 MB'lık ileti boyutu sınırı olduğundan, büyük e-postalar posta kutularını taşıyanlarda mide yanmasına da neden olabilir.

Geçişler için PowerShell Komut Dosyası Oluşturma

Küçük veya büyük posta kutusu geçişleriyle çalışırken, bunları kullanıcıların İzin sorunları yaşamayacağı, BT personelinin geçişlerden sonraki gün destekleyebileceği ve yöneticinin yapılan tüm taşımaları etkili bir şekilde takip edebileceği şekilde gruplamak iyi bir uygulamadır. uçuşta.

Posta kutusu taşıma listeleriyle CSV dosyalarının kullanılması, hem taşınacak posta kutularının kontrol edilebilir boyutunu hem de yöneticinin takip edebileceği kolay bir referans seti sağlar. Örneğin, posta kutularını 25 ila 50'lik gruplar halinde taşıdığımızı varsayalım; CSV dosyaları olarak kaydedilen bu toplu dosyalar, tek bir 'PrimarySMTPAddress' başlığını ve ardından taşınacak posta kutusu e-posta adreslerinin bir listesini içerebilir, şu şekilde:

PrimarySMTPAddressdavid@sciptrunner.comlarry@scriptrunner.com

Ön Kontroller

1.UPN Maçı

Bu kontrolde CSV dosyasında belirtilen SMTP adresini alıp UPN için posta kutusunu sorgulayıp iki değeri karşılaştırıyoruz. Uyumsuzluk varsa bunu bir dosyaya aktarabilir veya ekrana gösterebiliriz, hatta her ikisini de yapabiliriz. Bu dosyaya daha sonra başvurabileceğimiz için bir günlük dosyası idealdir. Aşağıdaki kod örneğinde bunu arıyoruz ve tüm uyumsuzluklar daha sonra analiz edilmek üzere bir dosyada saklanıyor.

$CSV = Import-CSV batch1.csvForeach ($Line in $CSV) {$PrimarySMTPAddress = $Line.PrimarySMTPAddress$UPN = (Get-Mailbox $PrimarySMTPAddress).UserPrincipalNameIf ($PrimarySMTPAddress -ne $UPN) {$Output = "The mailbox $PrimarySMTPAddress does not have a matching UPN and is set to $UPN." | Out-File -File $LogDestination -Append}}

Sıkça sorulan bir soru şudur: "UPN'yi neden kullanıcının Birincil SMTP adresiyle eşleştiriyoruz?" ”. Basitçe söylemek gerekirse, daha iyi bir son kullanıcı deneyimi için Microsoft'un kendi tavsiyesine uyuyoruz:

“Microsoft'un önerdiği en iyi uygulamalar, UPN'yi birincil SMTP adresiyle eşleştirmektir. ”

Kaynak:Alternatif Giriş Kimliğini Yapılandırma | Microsoft Dokümanları

İyileştirme

İsterseniz bu sorunu çözmek için PowerShell'i de kullanabiliriz. Bu basit kod bloğu, bir posta kutusunun Birincil SMTP adresini bulacak ve UPN'yi eşleşecek şekilde değiştirecektir. CSV tabanlıdır:

Foreach ($Line in $CSV) {$Mailbox = Get-Mailbox $Line$PrimarySMTP = [string]$Mailbox.PrimarySMTPAddress$NewUPN = $PrimarySMTPSet-Mailbox $PrimarySMTP -UserPrincipalName $NewUPN}

2. mail.onmicrosoft.com alan adı kontrolü

Posta kutusu taşımalarını kaldırın ve posta yönlendirmesi, şirket içi posta kutularına damgalanan SMTP etki alanlarına dayanır. Onaylamamız gereken anahtar alan adlarından biri '.mail.onmicrosoft.com' olup, eğer eksikse posta kutusunun taşınmasını engelleyecektir.

$Mailboxes = Get-Mailbox -ResultSize UnlimitedForeach ($Mailbox in $Mailboxes) {$DomainFound = $False$EmailAddresses = (Get-Mailbox $Mailbox).EmailAddresses$EmailAddresses | Foreach-Object {If ($_ -like "*mail.onmicrosoft.com") {$DomainFound = $True}}If (!$DomainFound) {Write-host 'Not Found!'} Else {Write-host 'Domain Found'}}

İyileştirme

Bu alan adının eksik olması, geçişin kendi yolunda durmasına neden olacaktır. Bu nedenle bu adresi posta kutumuza almalıyız. Bunu nasıl yapabiliriz?

$Domain = ‘tenant.mail.onmicrosoft.com’$Alias = ‘Malboxalias’$NewAddress = $Alias+’@’+$DomainSet-Mailbox $PrimarySMTP -EmailAddresses @{Add="$EmailAddress"}

Artık posta kutunuz gerekli adrese sahip. Bu konuda bir uyarı, bir posta kutusunda bu özelliğin (EmailAddressPolicyEnabled) True olarak ayarlanması durumunda bu değişikliğin başarısız olacağıdır. Bunun yerine şunu çalıştırmanız gerekecek:

$Domain = ‘tenant.mail.onmicrosoft.com’$Alias = ‘Malboxalias’$NewAddress = $Alias+’@’+$DomainSet-Mailbox $PrimarySMTP -EmailAddresses @{Add="$EmailAddress"}

3. Kötü alan adı kontrolü

Bir posta kutusunu Exchange Online'a geçirmek için, Exchange Online ile doğrulanmamış bir SMTP Etki Alanına sahip olmaması gerekir. Bir posta kutusu doğrulanmamış bir alan adıyla damgalanırsa taşıma işlemi de başarısız olur. Öncelikle, alan adlarının listesini bir değişkende saklamamız ve başka alan adlarının listelenmediğinden emin olmak için her posta kutusunun EmailAddresses özelliğini kontrol etmemiz gerekir. Bunun gibi bir kod bloğu yeterli olacaktır:

# Good Domains$GoodDomains = 'domain1.com','domain2.com','domain3.com','tenant.mail.onmicrosoft.com'$Mailboxes = Get-mailboxForeach ($Mailbox in $Mailboxes) {#Email Addresses to examine$Addresses = $Mailbox.EmailAddresses$User = $Mailbox.DisplayName$UPN = $Mailbox.UserPrincipalNameForeach ($Address in $Addresses) {$SmtpAddress = $Address.SMTPAddress$CurrentDomain = ($SMTPAddress.Split('@'))[1]If ($GoodDomains -NotContains $CurrentDomain) {$output = "$User,$UPN,$CurrentDomain." | Out-File -File $LogDestination -Append}}}

İyileştirme

Doğrulanmamış herhangi bir alan adı, taşıma işlemini kendi yolunda durduracaktır; peki bunları nasıl kaldırabiliriz? En kolayı ve potansiyel olarak en yıkıcı olanı şunu yapmaktır:

$Aliases = (Get-Mailbox -ResultSize Unlimited |Where {$_.EmailAddresses -like "*baddomain.com"}).AliasForeach ($Alias in $Aliases){$EmailAddresses = (Get-Mailbox $Alias).EmailAddressesForeach ($EmailAddress in $EmailAddresses) {If ($EmailAddress -like "*baddomain.com"){Set-Mailbox $Alias -EmailAddresses @{remove="$EmailAddress"}}}}

Bu kod bloğu, 'baddomain.com' etki alanına sahip bir SMTP Adresine sahip tüm posta kutularını tanımlayacak ve ardından bu etki alanıyla eşleşen tüm adresleri kaldıracaktır. Bir şey için o alana bağlıysanız bu durum sorunlara neden olabileceğinden dikkatli olun. Yalnızca belirli posta kutularında bu etki alanının kaldırılması gerekiyorsa, bunu filtrelemek faydalı olabilir.

4. Saklama ve Davaya İlişkin Bekletme uygulandı

Gerçekleştirebileceğimiz diğer bazı kontroller, bir posta kutusunun Saklama Politikasının veya davaya yönelik bekletme uygulamasının olup olmadığıdır. Saklama Politikaları için, bunları saklamaya veya politikayı Exchange Online'da uygulamamaya karar verebiliriz. Dava Bekletme, bir posta kutusu için farklı bir çağrışıma sahiptir ve yasal bir gereklilik olabileceği ve posta kutularına Exchange Online'da yeniden bir bekletme uygulanması gerekebileceği için bunların tutulması gerekir. Posta kutularını şu şekilde tanımlayabiliriz:

$LitigationMailboxes = Get-Mailbox -Filter {LitigationHoldEnabled -eq $True} | Select-Object DisplayName,PrimarySMTPAddress | Out-File $LitigationDestination -Append$RetentionMailboxes = Get-Mailbox | Where {$_.RetentionHoldEnabled -eq $True} | Select-Object DisplayName,PrimarySMTPAddress | Out-File $RetentionDestination -Append

5. Büyük Eşya Kontrolü

Exchange Online'ın 150 MB'lık mutlak büyük öğe sınırı vardır ve bu, posta kutunuzda 150 MB'ın üzerinde öğeler varsa, posta kutusunu Exchange Online'a taşıyamayacağınız anlamına gelir. Üstelik e-postanın boyutunu etkileyebilecek diğer faktörlerden dolayı aslında bundan daha küçük olabilir. Analiz için 125 MB'ın üzerindeki öğeler için posta kutularını incelemeniz önerilir.

Get-Mailbox -ResultSize Unlimited | Get-MailboxFolderStatistics -IncludeAnalysis -FolderScope All | Where-Object {$_.TopSubjectSize -gt 125MB} | Select-Object Identity, TopSubject, TopSubjectSize | Export-CSV -path "C:reportsLArgeItemReport.csv" -notype

PowerShell Betiği

PowerShell kodlama deneyimine sahip olan veya olmayan Yöneticiler için bir kod kümesini daha erişilebilir hale getirmek amacıyla, Önkoşul kontrollerini gerçekleştirmek üzere PowerShell ile GUI benzeri bir deneyim oluşturabiliriz.

Örneğin, betiği menü odaklı yaparsak PowerShell betiğimiz, yalnızca hangi seçeneklerin çalıştırılacağını seçmenin yeterli olduğu bir deneyim sağlayabilir. Ayrıca ayrıntıları, kontrol edilecek kullanıcı listelerini içeren bir CSV dosyasına gönderebiliriz. Komut dosyası geçişin tüm yönlerini kapsayacaksa menü şuna benzer:

Basit menü odaklı PowerShell betiği

Taşıma sürecinin her önemli bölümü için bir menü öğemizin bulunduğunu unutmayın: önkoşul kontrolleri, posta kutusu taşımaları ve raporlama. Önkoşul alt menüsü için, bu makalede ele aldığımız önkoşul kontrollerini içerecek şekilde menüyü şu şekilde şekillendirebileceğiz:

Önkoşul kontrollerini yürütmek için PowerShell betiği

Artık posta kutumuzun Exchange'den Exchange Online'a geçişini yönlendirmek için kullanılabilecek bir komut dosyamız var.

Çözüm

Böylece geçiş senaryomuzun ilk bölümünü tamamlamış oluyoruz. Bu makalede, bir posta kutusunu taşımadan önce bile dikkate alınması gereken önkoşulların bulunduğunu ve hatta yukarıdaki listenin mutlaka %100 olmadığını öğrendik. Posta kutusu taşıma işleminin kapsamı dışında kalan diğer yapılandırma öğeleri şunlardır:

  1. Günlük kurallarını yeniden oluşturma
  2. OWA politikaları oluşturma
  3. Mesaj sınırlarını yapılandırma
  4. İzinleri kontrol etme ve uygun gruplar oluşturma
  5. Güvenliği Yapılandırma - Ayrıntılar için PowerShell ve Exchange Online Security hakkındaki makaleme bakın.

… ve çok daha fazlası …

Şunu söylemek yeterli ki, bu komut dosyası Exchange Online'a geçişi kolaylaştıracak daha büyük bir projenin yalnızca bir parçası. Serinin bir sonraki makalesinde yeni hamleler oluşturma, hamleleri askıya alma, hamleleri kaldırma ve daha fazlasını ele alacağız. Ayrıca, kendi geçiş komut dosyanızı oluşturmak için temel olarak kullanabileceğiniz işlevsel bir komut dosyasına bir bağlantı da dahil edilecektir.

İlgili makaleler