O365 – Importando regras de transporte (ETR) para o Exchange Online
By: Caio Ribeiro César e Ramon Rocha
Em 2011, comentamos sobre o procedimento para High Availability de Edge Transport Servers. Este procedimento consistia basicamente de um export de configurações para XML e posteriormente o import para os outros servidores.
O tempo passou, porém ainda utilizamos XML para diversas tarefas administrativas. Hoje, iremos comentar sobre a exportação e importação de ETR (Exchange Transport Rules).
Exportar a coleção de regras é um processo de duas etapas. Inicialmente, exportamos as de regras para uma variável e, em seguida, gravamos os dados em um arquivo XML.
No exemplo abaixo, exportamos as regras de um Exchange Online:
PS C:\Users\caioc> $file = Export-TransportRuleCollection
PS C:\Users\caioc> Set-Content -Path "C:\Users\caioc\Downloads\RulesExO.xml" -Value $file.Filedata -Encoding Byte
A regra é exportada em um arquivo XML:
ExO
<?xml version="1.0" encoding="UTF-16" standalone="true"?>
<rules name="TransportVersioned"><rule name="Mailbox Almost Full" format="cmdlet" id="ea7affcb-dad7-4fed-b7a2-241b3a596111"><version requiredMinVersion="15.0.3.0"><commandBlock><![CDATA[
New-TransportRule -Name 'Mailbox Almost Full' -Mode Enforce -SubjectContainsWords 'Your mailbox is almost full' -CopyTo 'caioc@c4iocesar.onmicrosoft.com'
]]></commandBlock></version></rule>
No exemplo abaixo, exportamos as regras de um ambiente Exchange Server 2010 (legacy):
<rule name="Discard messages to - noreply@c4iocesar.com" comments="Noreply Disregard Emails"><version requiredMinVersion="14.0.0.0"><fork><recipient address="noreply@c4iocesar.com"/></fork><condition><and><true/></and></condition><action name="DeleteMessage"/></version></rule>
Como podemos visualizar, o padrão do formato do arquivo diferencia entre versões antigas e as mais atuais (2013+).
O processo para importar a regra segue o mesmo padrão - carregamos os dados para uma variável e depois usamos essa variável para transmitir os dados para o cmdlet:
PS C:\Users\caioc> [Byte[]]$Data = Get-Content -Path "C:\Users\caioc\Downloads\RulesExO.xml" -Encoding Byte -ReadCount 0
PS C:\Users\caioc> Import-TransportRuleCollection -FileData $Data
Confirm
Importing a rule collection will overwrite all existing rules in that collection. Do you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"): A
WARNING: The message rejection text and custom status code that you created are ignored because you have configured the policy to notify the sender with a Policy Tip. - Error details: RejectMessageReasonText and RejectMessageEnhancedStatusCode parameters will be ignored because NotifySender action is set to NotifyOnly.
WARNING: The rule contains NotifySender action with an option that may reject the message. In case the message gets rejected, other actions won't be applied.
Conforme podemos observar acima, as regras foram importadas de um arquivo xml. É muito importante ressaltar que o import substitui todas as regras de transporte definidas na sua organização. Ou seja, ele irá sobrescrever as configurações de acordo com o arquivo XML.
Recentemente, a equipe de suporte teve um chamado em que ao importar as regras de um ambiente Exchange Server 2010 para o Exchange Online, o erro abaixo ocorria:
PS C:\Users\caioc> [Byte[]]$Data = Get-Content -Path "C:\Users\caioc\Downloads\Rules.xml" -Encoding Byte -ReadCount 0
PS C:\Users\caioc> Import-TransportRuleCollection -FileData $Data
Confirm
Importing a rule collection will overwrite all existing rules in that collection. Do you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"): A
'Import-TransportRuleCollection' cannot be used with a engine-based XML file in Datacenter environment.
+ CategoryInfo : InvalidData: (File Data:String) [Import-TransportRuleCollection], ParseException
+ FullyQualifiedErrorId : [Server=FR1PR80MB1730,RequestId=8a6017a4-4ce7-44d2-bc92-a235d03861b3,TimeStamp=12/21/2017 4:50:05 PM] [
FailureCategory=Cmdlet-ParseException] 5BFD5E30,Microsoft.Exchange.MessagingPolicies.Rules.Tasks.ImportTransportRuleCollection
+ PSComputerName : ps.outlook.com
A mensagem de erro “Cannot be used with a engine-based XML file in Datacenter environment” ocorre pois o formato do conjunto de regras de transporte exportado foi alterado no Exchange Server 2013.
O novo formato não pode ser exportado da versão 2010 para o Exchange Online, ou mesmo importado das atuais para o Exchange Server 2010.
O workaround para este cenário é a importação destas regras para versões 2013 ou 2016 e então um novo export & import para o Exchange Online.