3 min read
IT-Automation für maximale Effizienz nutzen
Bist du bereit für eine Transformation deines IT-Mangements? Unser brandneues Whitepaper, Maximizing IT Automation: The...
ScriptRunner Blog
Migrationen von Postfächern von Exchange zu Exchange Online werden auf zwei Arten durchgeführt; entweder über die Weboberfläche des Exchange Admin Centers oder über PowerShell, um die Migration mithilfe von Skripten oder One-Linern auszuführen. Beide Methoden sind für diesen Zweck geeignet, und die meisten Migrationen werden mit beiden Methoden einwandfrei funktionieren.
Dies mag zwar stimmen, Microsoft hat aber einige Einschränkungen eingeführt, die bei einigen Migrationen zu einem suboptimalen Erlebnis führen können. Zum Beispiel sind Migrationsstapel im Exchange Admin Center auf 100 begrenzt, und bei einer großen Migration kann diese Grenze einschränkend sein, je nachdem, wie die Stapel verwaltet werden. Hinzu kommt, dass das Admin Center manchmal inkonsistent ist. Die Verwendung von PowerShell für die Verwaltung einer Migration könnte sich für einen Administrator als effizienter und reaktionsschneller erweisen.
In dieser zweiteiligen Blogserie wird behandelt, wie eine Migration von Anfang bis Ende gehandhabt wird, einschließlich einiger Vorabprüfungen und Berichterstellung.
Das Verschieben von Postfächern zu Exchange Online kann so einfach sein wie das Starten einer neuen Migration für ein Postfach, jedoch gibt es in einigen Organisationen Legacy-Konfigurationen oder -Einrichtungen, die dazu führen können, dass eine Postfachverschiebungsanfrage fehlschlägt. Wir sprechen hier von E-Mail-Domänen, die möglicherweise eine Proxy-Adresse für ein Postfach bilden, die nicht mehr benötigt werden, nicht als akzeptierte Domänen in Exchange definiert oder in Exchange Online konfiguriert sind.
Eine weitere Prüfung, die durchgeführt werden kann, ist der Abgleich des User Principal Name (UPN) eines Postfachs mit der primären SMTP-Adresse, da diese beiden Werte nach den Vorgaben von Microsoft übereinstimmen sollten. Jeder dieser Punkte kann ein Hindernis für eine Verschiebung sein.
Zusätzlich können Aufbewahrungsrichtlinien und gesetzliche Aufbewahrungsfristen den Umzugsprozess erschweren. Jeder dieser Punkte kann vor der Migration dokumentiert und nach der Migration mit etwas Voraussicht konfiguriert werden.
Große E-Mails können denjenigen, die Postfächer migrieren, ebenfalls Kopfzerbrechen bereiten, da Exchange Online eine Größenbeschränkung von 150 MB für Nachrichten hat.
Bei der Arbeit mit Postfachmigrationen, ob klein oder groß, ist es eine gute Praxis, sie so zu bündeln, dass Anwender keine Probleme mit Berechtigungen haben, das IT-Personal am Tag nach der Migration bereits ordnungsgemäß supporten kann und der Administrator effektiv den Überblick über alle Umzüge behält, die im Gange sind.
Die Verwendung von CSV-Dateien mit Listen der zu verschiebenden Postfächer gewährleistet sowohl eine kontrollierbare Größe der zu verschiebenden Postfächer als auch einen einfachen Referenzsatz für den Administrator, um den Überblick zu behalten. Angenommen, wir verschieben Postfächer in Stapeln von 25 bis 50 Postfächern. Diese Stapeldateien, die als CSV-Dateien gespeichert werden, können eine einzelne Kopfzeile „PrimarySMTPAddress“ und dann eine Liste der zu verschiebenden Postfach-E-Mail-Adressen enthalten, etwa so:
PrimarySMTPAddress
david@sciptrunner.com
larry@scriptrunner.com
Bei dieser Prüfung nehmen wir die in der CSV-Datei angegebene SMTP-Adresse, fragen die Mailbox nach der UPN ab und vergleichen die beiden Werte. Wenn es eine Unstimmigkeit gibt, können wir diese in eine Datei exportieren oder auf dem Bildschirm anzeigen, oder sogar beides tun. Eine Logdatei ist ideal, da wir später auf diese Datei verweisen können. Im folgenden Codebeispiel wird danach gesucht, und alle Nichtübereinstimmungen werden in einer Datei zur späteren Analyse gespeichert.
$CSV = Import-CSV batch1.csv
Foreach ($Line in $CSV) {
$PrimarySMTPAddress = $Line.PrimarySMTPAddress
$UPN = (Get-Mailbox $PrimarySMTPAddress).UserPrincipalName
If ($PrimarySMTPAddress -ne $UPN) {
$Output = "The mailbox $PrimarySMTPAddress does not have a matching UPN and is set to $UPN." |
Out-File -File $LogDestination -Append
}
}
Eine wiederkehrende Frage ist „warum passen wir den UPN an die primäre SMTP-Adresse eines Benutzers an?“. Nun, ganz einfach, wir folgen der Empfehlung von Microsoft selbst, um die Benutzerfreundlichkeit zu erhöhen:
„Die empfohlenen Best Practices von Microsoft sind die Anpassung des UPN an die primäre SMTP-Adresse.“
Quelle: Konfigurieren von alternativen Anmelde-ID | Microsoft Docs
Wir können auch PowerShell verwenden, um dieses Problem zu beheben, wenn wir das wollen. Dieser einfache Codeblock findet die primäre SMTP-Adresse eines Postfachs und ändert den UPN entsprechend. Er ist CSV-basiert:
Foreach ($Line in $CSV) {
$Mailbox = Get-Mailbox $Line
$PrimarySMTP = [string]$Mailbox.PrimarySMTPAddress
$NewUPN = $PrimarySMTP
Set-Mailbox $PrimarySMTP -UserPrincipalName $NewUPN
}
Das Verschieben von Postfächern und das Mail-Routing sind abhängig von SMTP-Domänen, die auf den Postfächern lokal hinterlegt sind. Eine wesentliche Domäne, die wir bestätigen müssen, ist ‚.mail.onmicrosoft.com‘, die, wenn sie fehlt, die Verschiebung des Postfachs verhindert.
$Mailboxes = Get-Mailbox -ResultSize Unlimited
Foreach ($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'
}
}
Das Fehlen dieser Domäne kann eine Migration zum Scheitern bringen. Daher sollten wir diese Adresse auf die Mailbox bringen. Wie machen wir das?
Das Postfach braucht die erforderliche Adresse. Ein Fallstrick dabei ist, dass diese Änderung fehlschlägt, wenn ein Postfach die Eigenschaft (EmailAddressPolicyEnabled) auf True gesetzt hat. In diesem Fall musst du stattdessen Folgendes ausführen:
$Domain = 'tenant.mail.onmicrosoft.com'
$Alias = 'Malboxalias'
$NewAddress = $Alias+'@'+$Domain
Set-Mailbox $PrimarySMTP -EmailAddresses @{Add="$EmailAddress"
}
Um ein Postfach nach Exchange Online zu migrieren, darf es keine SMTP-Domäne haben, die nicht mit Exchange Online verifiziert wurde. Wenn ein Postfach mit einer nicht verifizierten Domäne versehen ist, wird die Migration ebenfalls fehlschlagen. Zunächst müssen wir eine Liste von Domänen in einer Variablen speichern und die Eigenschaft „EmailAddresses“ jedes Postfachs überprüfen, um sicherzustellen, dass keine anderen Domänen aufgeführt sind. Ein Codeblock wie dieser sollte ausreichen:
# Good Domains
$GoodDomains = 'domain1.com','domain2.com','domain3.com','tenant.mail.onmicrosoft.com'
$Mailboxes = Get-mailbox
Foreach ($Mailbox in $Mailboxes) {
#Email Addresses to examine
$Addresses = $Mailbox.EmailAddresses
$User = $Mailbox.DisplayName
$UPN = $Mailbox.UserPrincipalName
Foreach ($Address in $Addresses) {
$SmtpAddress = $Address.SMTPAddress
$CurrentDomain = ($SMTPAddress.Split('@'))[1]
If ($GoodDomains -NotContains $CurrentDomain) {
$output = "$User,$UPN,$CurrentDomain." |
Out-File -File $LogDestination -Append
}
}
}
Jede nicht validierte Domäne wird eine Migration verhindern, wie kann man sie also entfernen? Am einfachsten, aber auch potenziell destruktivsten, ist dieser Ansatz:
$Aliases = (Get-Mailbox -ResultSize Unlimited | Where {$_.EmailAddresses -like "*baddomain.com"}).Alias
Foreach ($Alias in $Aliases){
$EmailAddresses = (Get-Mailbox $Alias).EmailAddresses
Foreach ($EmailAddress in $EmailAddresses) {
If ($EmailAddress -like "*baddomain.com"){
Set-Mailbox $Alias -EmailAddresses @{remove="$EmailAddress"}
}
}
}
Dieser Codeblock identifiziert alle Postfächer, die eine SMTP-Adresse mit der Domäne „baddomain.com“ haben, und entfernt dann alle Adressen, die mit dieser Domäne übereinstimmen. Sei vorsichtig, da dies zu Problemen führen kann, wenn du auf etwas in dieser Domäne angewiesen bist. Es kann sinnvoll sein, dies zu filtern, wenn nur bestimmte Postfächer diese Domäne entfernen müssen.
Weitere Überprüfungen, die wir durchführen können, sind, ob ein Postfach einer Aufbewahrungsrichtlinie oder einer gesetzlichen Aufbewahrungsfrist unterliegt. Bei Aufbewahrungsrichtlinien können wir entscheiden, ob wir sie beibehalten oder die Richtlinie in Exchange Online nicht anwenden wollen. Gesetzliche Aufbewahrungsfristen haben eine andere Bedeutung für ein Postfach und müssen typischerweise beibehalten werden, weil es juristisch notwendig ist, sodass die Prozesssperre neu angewandt werden muss, sobald das Postfach in Exchange Online umgezogen wurde. Wir können diese Postfächer wie folgt identifizieren:
$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
Exchange Online hat ein absolutes Limit für große Objekte von 150 MB, und das bedeutet, dass du ein Postfach nicht nach Exchange Online verschieben können, wenn es Elemente größer als 150 MB enthält. Darüber hinaus könnte die Grenze aufgrund anderer Faktoren, die die Größe einer E-Mail beeinflussen können, tatsächlich sogar niedriger liegen.
Daher solltest du die Postfächer auf Elemente über 125 MB prüfen:
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
Um einen Satz Code für Admins zugänglicher zu machen, die vielleicht nicht so viel PowerShell-Scripting-Erfahrung haben, können wir eine GUI-ähnliche Lösung mit PowerShell erstellen, um die Vorab-Checks durchzuführen.
Wenn wir beispielsweise ein menügesteuertes PowerShell-Skript einsetzen, musst du nur noch die Option auswählen, die ausgeführt werden sollen. Zusätzlich können wir Details in eine CSV-Datei ausgeben, die Listen von zu überprüfenden Benutzern enthält.
Wenn das Skript alle Aspekte einer Migration abdecken soll, könnte das Menü etwa so aussehen:
Einfaches menügesteuertes PowerShell-Skript
Beachte, dass wir einen Menüpunkt für jeden Hauptteil des Umzugsvorgangs haben: Vorab-Checks, Postfachumzüge und Berichte. Für das Untermenü „Vorab-Checks“ könnten wir dann das Menü so gestalten, dass es die in diesem Artikel genannten Vorab-Checks enthält, etwa so:
PowerShell-Skript zum Ausführen von Vorab-Checks
Und nun haben wir ein Skript, mit dem wir eine Migration unserer Postfächer von Exchange zu Exchange Online steuern können.
Damit ist unser erster Teil des Migrationsskripts abgeschlossen. In diesem Artikel haben wir gelernt, dass auch vor der Migration eines Postfachs einige Voraussetzungen erfüllt sein müssen, und selbst die obige Liste ist nicht unbedingt 100%ig.
Weitere Konfigurationspunkte, die nicht in den Bereich der Postfachmigration selbst fallen, sind:
Es genügt zu sagen, dass dieses Skript nur ein Teil eines größeren Projekts ist, um den Wechsel zu Exchange Online zu erleichtern. Im nächsten Artikel der Serie werden wir uns mit dem Erstellen neuer Migrationen, dem Stoppen von Migrationen, dem Entfernen von Migrationen und mehr beschäftigen. Außerdem wird ein Link zu einem funktionalen Skript enthalten sein, das du als Grundlage zum Erstellen deines eigenen Migrationsskripts verwenden kannst.
Nov 28, 2024 by Heiko Brenn
Bist du bereit für eine Transformation deines IT-Mangements? Unser brandneues Whitepaper, Maximizing IT Automation: The...
Okt 30, 2024 by Damian Scoles
MVP Damien Scoles berichtet über seine Erfahrungen mit Microsoft Graph. In seinem dritten Artikel geht er näher auf...
Okt 16, 2024 by Damian Scoles
Wie unterscheidet sich die Exchange Online-Administration mit dem Microsoft Graph PowerShell-Modul vom herkömmlichen...
Damian Scoles ist ein zehnfacher Microsoft MVP mit Spezialisierung auf Exchange, Office 365 und PowerShell, der über 25 Jahre Erfahrung in der IT-Branche mitbringt. Er ist im Großraum Chicago ansässig und begann mit der Verwaltung von Exchange 5.5 und Windows NT. Im Laufe der Jahre hat er mit Office 365 seit BPOS gearbeitet und darüber hinaus Erfahrung mit Azure AD, Security and Compliance Admin Centers und Exchange Online. Zu seinem Engagement in der Community gehören Beiträge in TechNet-Foren, die Erstellung von PowerShell-Skripten, die in seinen Blogs zu finden sind, das Schreiben von ausführlichen PowerShell/Office365/Exchange-Blogartikeln, Tweets und die Erstellung von PowerShell-Videos auf YouTube. Er hat fünf PowerShell-Bücher geschrieben und arbeitet außerdem aktiv an dem Buch "Microsoft 365 Security for IT Pros".