Pozn.: Prakticky jsem instaloval Exchange Server SE roli Mailbox server na Windows Server 2025. V prostředí s jinou interní a veřejnou DNS doménou a Split DNS (Split-Brain DNS). Do existující organizace Exchange 2016 s využitím DAG (Database Availability Group).
Přesun poštovních schránek
Při migraci Exchange organizace na novou verzi a nové servery musíme nejprve nové servery nakonfigurovat. Pak následuje krok, kdy přesuneme poštovní schránky do nových DB na nových serverech. Přesun poštovní schránky z jedné databáze poštovních schránek do jiné je běžný jednoduchý proces. Označuje se jako Move Request a může probíhat za provozu. Využívá se Mailbox Replication Service (MRS).
Přesun schránek nějakou dobu trvá, což záleží na jejich množství a velikosti. V praxi nám může postupný přesun zabrat několik týdnů. Může probíhat za provozu a nenarazil jsem na žádné problémy. Ale možná je efektivnější provádět mimo pracovní dobu, kdy ke schránce není připojený klient.
Přesun schránek zatěžuje poštovní servery, ale Exchange zatížení hlídá a pozastavuje přesuny. Stav požadavku na přesun pak ukazuje místo CopyingMessages například StalledDueToTarget_MdbReplication, StalledDueToTarget_DiskLatency, StalledDueToTarget_Processor.
DŮLEŽITÉ Přesun poštovní schránky probíhá jako standardní transport, takže se k celému obsahu vytváří transakční logy. Během migrace potřebujeme hodně místa pro uložení těchto logů. Tedy disk pro logy musí být mnohem větší než pro běžný provoz. Pokud prostor dojde, tak se odpojí databáze. Když využíváme DAG, tak se stejné místo obsadí na všech serverech, kde se nachází kopie databáze.
Pořadí přesunu schránek
Microsoft uvádí následující pořadí, jak různé typy schránek přesouvat.
- přesun systémových schránek (arbitration mailboxes)
- přesun poštovních schránek uživatelů (user mailboxes)
- přesun poštovních schránek veřejných složek (public folder mailboxes)
Pozn.: Narazil jsem na doporučení přesunout nejdříve schránky veřejných složek, než se pustíme do přesunu uživatelských poštovních schránek. Uvedený důvod byl, že jinak v OWA není přístup k veřejným složkám (což se dělá přes oblíbené - Favorites). Mě u přesunutého testovacího uživatele přístup k PF na původních serverech fungoval.
Můžeme přesouvat
- jednu poštovní schránku (Move Request)
- více poštovních schránek (Batch Move Request)
- více poštovních schránek zadaných v CSV (Migration Batch)
Jak schránky přesouvat
Přesun schránek můžeme spravovat (nastavit) v EAC (Exchange Admin Center), kde je k dispozici jednoduchý průvodce. Nebo pomocí EMS (Exchange Management Shell), kde můžeme jednoduše provádět hromadné konfigurace. Vytvoří se úloha (dávka - Batch), která provádí přesun a běží na pozadí. EAC vždy vytváří Migration Batch. Když vytvoříme Migration Batch v EMS, tak jej v EAC uvidíme a můžeme ovládat.
Migration Batch má jako vstup CSV soubor a provádí přesun všech zadaných schránek. Pro každou vygeneruje Move Request. Dávka se může spustit hned po vytvoření nebo ručně. V EMS můžeme pro dávku (Batch) i požadavek (Request) využít parametry CompleteAfter a/nebo StartAfter, které určují datum a čas pro dokončení či zahájení migrace dat.
Po úspěšném dokončení přesunu je dobré požadavek smazat. Microsoft uvádí, že to již není potřeba (patrně proto, že dochází k automatickému mazání po 30 dnech). Ale pokud bychom chtěli schránku znovu přesouvat, tak nám to nedovolí, protože má přiřazen dokončený požadavek na přesun. Na druhou stranu to může být výhoda, abychom omylem nepřesouvali schránku, která již přesunuta je.
Exchange Admin Center (EAC)
- EAC - Exchange Admin Center
- Recipients - Migration

- klikneme na plus (New) a zvolíme Move to a different database
- přidáme schránky (uživatele), které chceme přesunout (výběrem ze seznamu nebo pomocí CSV)

- v druhém kroku pojmenujeme úlohu (dávku), zvolíme cílovou DB, případně i archivní DB a limit na chybné položky
- v posledním kroku nastavíme příjemce reportu o dokončení a zda se dávka zahájí a ukončí automaticky nebo manuálně
Exchange Management Shell (EMS)
K dispozici máme řadu PowerShell cmdletů jako
- New-MoveRequest
- New-MigrationBatch
- Get-MoveRequest
- Get-MigrationBatch
- Remove-MoveRequest
- Get-MoveRequestStatistics
- Get-MailboxStatistics
Mailboxes - Poštovní schránky
- Exchange Server 2016 přesun poštovních schránek a OAB - můj starší článek
Přesun systémových schránek
Jako první se doporučuje přesunou Arbitration Mailboxes, což jsou systémové schránky kam se ukládají různá data celé organizace. Níže je seznam sedmi Arbitration Mailboxes a jedné Audit Log Mailbox.
DisplayName Name
----------- ----
Microsoft Exchange SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}
Microsoft Exchange Approval Assistant SystemMailbox{1f05a927-8a09-492d-ae8f-b4d0de00d60a}
Microsoft Exchange Federation Mailbox FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042
Microsoft Exchange SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9}
E4E Encryption Store - Active SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}
Microsoft Exchange SystemMailbox{2CE34405-31BE-455D-89D7-A7C7DA7A0DAA}
Microsoft Exchange Migration Migration.8f3e7716-2011-43e4-96b1-aba62d229136
SystemMailbox{8cc370d3-822a-4ab8-a926-bb94bd0641a9} SystemMailbox{8cc370d3-822a-4ab8-a926-bb94bd0641a9}
Pozn.: Ještě existuje jeden typ systémových schránek pro monitoring. Ty se nemají přesouvat. Vytváří se automaticky a při smazání databáze se odstraní. Zobrazíme je Get-Mailbox -Monitoring.
Výpis všech Arbitration schránek
Get-Mailbox -Arbitration | FT DisplayName, Name, ServerName, Database -AutoSize
Výpis všech Audit Log schránek
Speciální systémová schránka je AuditLog, kterou zobrazíme pomocí jiného parametru.
Get-Mailbox -AuditLog | FT DisplayName, Name, ServerName, Database -AutoSize
Přesun schránky Migration
První bychom měli přesunout Migration Mailbox.
New-MoveRequest Migration.8f3e7716-2011-43e4-96b1-aba62d229136 -TargetDatabase DBPraha1
Přesun všech ostatních
Pokračujeme s ostatními Arbitration Mailboxes, můžeme je vybrat třeba pomocí databáze (pokud jsou ve stejné), a Audit Log Mailbox.
Get-Mailbox -Arbitration -Database DB-Praha1 | New-MoveRequest -TargetDatabase DBPraha1 Get-Mailbox -AuditLog | New-MoveRequest -TargetDatabase DBPraha1
Výpis Discovery Search Mailbox
Další speciální schránka je Discovery Search Mailbox, která se používá pro ukládání kopie výsledků hledání In-Place eDiscovery. Měla by se automaticky vytvořit při instalaci prvního serveru v organizaci. Vedou se diskuse, zda je potřeba a má se přesouvat. Jistota je ji přesunout do nové DB.
Get-Mailbox -RecipientTypeDetails DiscoveryMailbox
Přesun Discovery Search Mailbox
New-MoveRequest DiscoverySearchMailbox* -TargetDatabase DBPraha1
Výpis informací a statistik o požadavcích na přesun (Move Request)
Můžeme si vypsat informace o požadavcích na přesun
Get-MoveRequest
Nebo jejich statistiky
Get-MoveRequest | Get-MoveRequestStatistics
Odstranění dokončených požadavků na přesun
Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest -Confirm:$false
Přesun uživatelských schránek
Hlavní část je přesun uživatelských schránek. Můžeme zadat přesun všech schránek najednou, ale lepší je rozdělit na menší části (i když má Exchange ve výchozím nastavení limit na 10 souběžných přesunů schránek a ostatní přesuny jsou pozastavené).
Můžeme využít EAC, kde jednoduše definujeme parametry a následně můžeme sledovat a řídit průběh ve webovém rozhraní. Zde si ukážeme použití EMS, které nabízí více možností. V obou případech můžeme pro jednotlivé uživatele (schránky) stáhnout report (log) o přesunu schránky.
Pozn.: Při přesunu schránek musíme stále kontrolovat dostatek volného místa pro transakční logy.
Počet schránek v databázi
Get-Mailbox -resultsize unlimited | Group-Object -Property Database | Sort-Object Name | FT Name, Count -AutoSize
Velikost jednotlivých databází
Get-MailboxDatabase -Status | Sort-Object Name | FT Name, DatabaseSize, AvailableNewMailboxSpace -AutoSize
Seznam schránek a jejich velikostí v dané databázi
Get-MailboxStatistics -Database DB-Praha1 | FT DisplayName, Database, ServerName, TotalItemSize, TotalDeletedItemSize, DisconnectDate -AutoSize
Pozn.: Cmdlet Get-MailboxStatistics zobrazuje všechny typy schránek, včetně Disconnected mailboxes (smazaných nebo přesunutých Soft-deleted). Často se tedy hodí následující výpis.
Get-Mailbox -Database DB-Praha1 | Get-MailboxStatistics | FT DisplayName, Database, ServerName, TotalItemSize, TotalDeletedItemSize -AutoSize
Seznam prvních 20 schránek z dané databáze
Get-Mailbox -resultsize unlimited -Database DB-Praha1 | Select-Object -First 20 | FT Name, ServerName, Database -AutoSize
Pokud chceme vidět také velikost schránek
Get-Mailbox -resultsize unlimited -Database DB-Praha1 | Select-Object -First 20 | Get-MailboxStatistics | FT DisplayName, Database, TotalItemSize -AutoSize
Seznam schránek menších než 100 MB
Get-Mailbox -Database DB-Praha1 -resultsize unlimited | Get-MailboxStatistics | Where-Object { $_.TotalItemSize -lt "100MB" } |
FT DisplayName, TotalItemSize, TotalDeletedItemSize -AutoSize
Vytvoření CSV s emaily schránek menších než 100 MB
$user = Get-Mailbox -Database DB-Praha1 -resultsize unlimited | Get-MailboxStatistics | Where-Object {$_.TotalItemSize -lt "100MB"}
"EmailAddress" | Out-File d:\users.csv
$user | ForEach-Object { (Get-Mailbox -Identity $_.DisplayName).PrimarySmtpAddress.address } | Out-File d:\users.csv -Append
Přesun prvních 20 schránek z dané databáze pomocí Move Request
Primární příklad přesunu určitého počtu schránek. Můžeme také přesouvat všechny schránky z určité databáze nebo serveru.
Get-Mailbox -Database DB-Praha1 | Select-Object -First 20 | New-MoveRequest -TargetDatabase DBPraha1
Přesun schránek z CSV pomocí Migration Batch
New-MigrationBatch -Local -Name LocalMove -CSVData ([System.IO.File]::ReadAllBytes("D:\users.csv")) -TargetDatabases DBPraha1 `
-AutoStart -AutoComplete
Informace a statistiky o požadavcích na přesun (Move Request)
Get-MoveRequest | Get-MoveRequestStatistics | FT -AutoSize
Zobrazení historie dokončených přesunů pro schránku
Get-MailboxStatistics -Identity bouska -IncludeMoveHistory | FL DisplayName, MoveHistory
Detailnější zobrazení
(Get-MailboxStatistics -Identity bouska -IncludeMoveHistory).MoveHistory
Report (log) o přesunu schránky
Historie dokončených přesunů ve schránce obsahuje také podrobný report (log) přesunu. Můžeme si vypsat pro všechny přesuny.
(Get-MailboxStatistics -Identity bouska -IncludeMoveReport).MoveHistory | FL Report
Pouze pro poslední
(Get-MailboxStatistics -Identity bouska -IncludeMoveReport).MoveHistory[0] | FL Report
Pro existující Move Request můžeme použít i jiný cmdlet.
Get-MoveRequestStatistics -Identity bouska -IncludeReport | FL Report
Případně výstup uložit do CSV pomocí | Export-CSV d:\report.txt
Odstranění dokončených požadavků
Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest -Confirm:$false
Smazání obsahu schránky
Pokud bychom potřebovali před přesunem smazat celý obsah schránky (třeba nějaké servisní), tak můžeme využít cmdlet Search-Mailbox. Potřebujeme roli Mailbox Import Export.
Search-Mailbox bouska -DeleteContent
Případně můžeme odstranit pouze smazané položky (které se běžně uchovávají 14 dní po smazání).
Search-Mailbox bouska -SearchDumpsterOnly -DeleteContent
Public Folders (PF) - Veřejné složky
- Exchange Server 2016 Public Folders a jejich migrace - můj starší článek
- Public folders in Exchange Server
Od Exchange 2013 se pro veřejné složky využívá speciální schránka (Public Folder Mailbox) uvnitř standardní Mailbox Database. Do schránky se ukládá hierarchie i obsah veřejných složek. Migrace veřejných složek spočívá v klasickém přesunu jejich schránky.
Struktura a zanoření
- databáze poštovních schránek (Mailbox Database) - můžeme mít vyhrazenou DB (jednu nebo více) pouze pro PF schránky nebo sdílenou s běžnými schránkami příjemců
- schránka veřejných složek (Public Folder Mailbox) - uvnitř DB můžeme vytvořit jednu nebo více schránek pro PF
- veřejná složka (Public Folder - PF) - uvnitř každé PF schránky můžeme vytvořit řadu veřejných složek
Při vytváření veřejné složky nemůžeme určit PF schránku kam se má umístit. PF Mailbox může mít maximální velikost 100 GB a 2000 souběžných přihlášení uživatelů. Pro přesun veřejných složek do jiné schránky můžeme využít skripty Split-PublicFolderMailbox.ps1 a Move-PublicFolderBranch.ps1 nebo cmdlet New-PublicFolderMoveRequest.
Kvóty veřejných složek
PF Mailbox je umístěn v běžné Mailbox DB, takže ve výchozím nastavení dědí limity na velikost schránky (IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota) z nastavení DB. Běžně se PF schránky používají o dost větší než schránky uživatelů, takže musíme nastavení upravit (na DB nebo schránce).
Tato nastavení se týkají celé schránky, a tedy dohromady všech veřejných složek, které se v ní nachází. Můžeme také nastavit limit na jednotlivé veřejné složky, který se týká pouze dané složky (nezapočítává se obsah podsložek). Nastavujeme pomocí Set-PublicFolder, výchozí nastavení je neomezeno.
Velikost schránky veřejných složek musíme sledovat, a pokud se příliš zaplní, tak některé PF přesunout do jiné (nové) schránky nebo zvětšit. Také se mi to v praxi stalo. Najednou přestala fungovat pravidla na přeposílání zpráv z PF. Trvalo mi zjistit, že se schránka dost zaplnila a uplatnil se limit Prohibit Send. Ale bylo dobře, že to bylo dříve, než se uplatnilo Prohibit Send Receive.
Přesun veřejných složek
Provádíme běžný přesun schránek, ale musíme využít EMS. V rámci EAC - Migration se schránky veřejných složek nenabízí.
Počet PF schránek v databázi
Get-Mailbox -PublicFolder -resultsize unlimited | Group-Object -Property Database | Sort-Object Name | FT Name, Count -AutoSize
Seznam PF schránek a jejich velikostí
Get-Mailbox -PublicFolder | Get-MailboxStatistics | FT DisplayName, Database, ServerName, TotalItemSize, TotalDeletedItemSize -AutoSize
Výpis veřejných složek větších než 512 MB (nepočítá se zanoření)
Get-PublicFolderStatistics -ResultSize Unlimited | Sort TotalItemSize -Descending | where { $_.TotalItemSize -gt 524288000 } |
FT Name, FolderPath, ItemCount, TotalItemSize, MailboxOwnerId -AutoSize
Přesun jedné PF schránky
Schránek veřejných složek většinou nemáme tak mnoho, takže je možno přesouvat po jedné. Dva příklady, které provedou to samé.
New-MoveRequest PFmailbox1 -TargetDatabase DBPF1 Get-Mailbox -PublicFolder -Identity PFmailbox1 | New-MoveRequest -TargetDatabase DBPF1
Přesun všech PF schránek na daném serveru
Get-Mailbox -PublicFolder -Server MAILPRAHA | New-MoveRequest -TargetDatabase DBPF1
Informace a statistiky o požadavcích na přesun (Move Request)
Get-MoveRequest | Get-MoveRequestStatistics | FT -AutoSize
Odstranění dokončených požadavků
Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest -Confirm:$false
Odstranění databáze poštovních schránek v DAGu
Pokud má databáze kopii na jiném serveru (využívá DAG), tak musíme nejprve odstranit všechny kopie, než můžeme smazat aktivní databázi.
Odstranění kopie databáze
- EAC - Exchange Admin Center
- Servers - Databases
- vybereme databázi, vpravo v detailech najdeme pasivní kopii (musí být ve stavu Healthy) a klikneme na Remove
- potvrdíme odstranění kopie kliknutím na Yes a informaci o odstranění kliknutím na OK
- ručně smažeme soubory (DB a transakční logy) na disku serveru, kde byla kopie

Pomocí Exchange Management Shell (EMS):
Remove-MailboxDatabaseCopy -Identity DB-Praha1\MAILPRAHA2
Odstranění databáze
Databázi lze smazat pouze když je prázdná. S výjimkou Monitoring/Health Mailboxes, které se odstraní automaticky při smazání databáze. Nesmí tedy obsahovat žádné uživatelské, archivní, public folder, arbitration ani audit mailboxes.
- EAC - Exchange Admin Center
- Servers - Databases
- vybereme databázi a klikneme na koš (Delete)
- potvrdíme odstranění databáze kliknutím na Yes a informaci o odstranění kliknutím na OK
- ručně smažeme soubory (DB a transakční logy) na disku serveru

Pomocí Exchange Management Shell (EMS):
Remove-MailboxDatabase -Identity DB-Praha1
Zatím zde nejsou žádné komentáře.