Accueil > Exchange, Powershell, Scripts > Exchange 2010 – Déplacement de boites aux lettres 1/2

Exchange 2010 – Déplacement de boites aux lettres 1/2

Le déplacement de boites aux lettres  est à la base de toute migration Exchange. L’opération peut bien entendu être effectuée depuis la console EMC mais nous allons voir ici, que la méthode PowerShell offre infiniment plus de possibilités. Nous allons tout d’abord donner quelques exemples simples de la commande New-MoveRequest pour nous habituer à sa syntaxe et finir avec quelques exemples un peu plus complexes.

Example 1 : 

New-MoveRequest - Identity "Bill.Pullman"  -TargetDatabase "DB01"

La commande permet simplement de déplacer la boite aux letters de Bill Pullman vers la base de données DB01. Le paramètre Identity doit permettre d’identifier la boite au lettres sans ambiguité. La valeur transmise peut être l’Alias, le login, l’adresse SMTP, …

TargetDatabase fait bien sur référence à la base de données cible vers laquelle la boite aux lettres sera déplacée. Example 2 :

Il peut arriver parfois qu’une boite aux lettres contienne des éléments corrompus. Dans ce cas, le déplacement de la boite concernée échoue dés qu’un élément corrompu est détecté. Cela peut être assez déplaisant lorsque cela arrive une fois 94% du déplacement effectué. Pour éviter cela, il est possible de renseigner le paramètre BadItemLimit  qui définit le nombre acceptable d’éléments corrompus. Ces derniers seront tout simplement ignorés par le processu de déplacement. Si vous estimez que ce nombre doit être être supérieur à 50, dans ce cas vous devrez également ajouter le paramètre AcceptLargeDataLoss  à votre commande.

New-MoveRequest - Identity "Bill.Pullman"  -TargetDatabase "DB01" -BadItemLimit 5

ou encore

New-MoveRequest - Identity "Bill.Pullman"  -TargetDatabase "DB01" -BadItemLimit 100 -AcceptLargeDataLoss

Example 3 :

Généralement, et particulièrement lors d’une migration, le déplacement des boites aux lettres doit être effectué par lot et non pas une boites après l’autre.  Dans ce cas, comment transmettre à la commande New-MoveRequest la liste des boites aux lettres à déplacer ? Eh bien, c’est la que la magie de PowerShell opère :

Pour déplacer toutes les boites aux lettres de la base « Old-Database » vers la base « DB01 », la commande est la suivante :

Get-Mailbox -Database "Old-Database" | New-MoveRequest -TargetDatabase "DB01" -BadItemLimit 100 -AcceptLargeDataLoss

La première partie de la commande (à gauche du |) récupère la liste des boites au lettres de la base de données « Old-Database » et la transmet ensuite à la commande New-MoveRequest. Si nous voulions déplacer tous les utilisateurs dont le nom commence par la lettre « B » par exemple, la commande serait alors  :

Get-Mailbox -Identity "B*" | New-MoveRequest -TargetDatabase "DB01" -BadItemLimit 100 -AcceptLargeDataLoss

Déplacement des boites au lettres des utilisateurs figurant dans l’unité d’organisation « Marketing ».

Get-Mailbox -OrganizationalUnit "Marketing" | New-MoveRequest -TargetDatabase "DB01" -BadItemLimit 100 -AcceptLargeDataLoss

Toute l’arborescence de l’unité d’organisation « Marketing » sera traitée. Autrement dit, si l’OU marketing contient deux autres OU : Manager et Assistants, les boites au lettres contenues dans ces dernières seront également déplacées.

Il est également possible de déplacer les boites aux lettres dont la liste est contenue dans un fichier CSV. Celui  ci doit impérativement contenir à la première ligne le nom de la colonne et sur chaque ligne suivante une valeur à transmettre à la commande.

Exemple de fichier CSV (contenant 4 lignes):

notepad-csv

Import-CSV ".\users.txt" | foreach {New-MoveRequest -Identity $_.Nom -TargetDatabase DB01 -BadItemLimit 10} 

Notez bien que le nom de la variable $_.Nom correspond au nom de la colonne utilisée dans le fichier CSV.

Une petite remarque au passage : lorsque vous effectuez plusieurs déplacement par lot, nous verrons dans la deuxième partie de cet article qu’il peut être bien pratique de pouvoir différencier entre les différentes vagues de déplacement effectuées. Pour cela, pensez à glisser le paramètre BatchName dans chacune de vos commandes. Par exemple :

Get-Mailbox -Database "Old-Database" | New-MoveRequest -TargetDatabase "DB01" -BatchName "Moving Mailbox from Old-Database" -BadItemLimit 100 -AcceptLargeDataLoss

Example 4 : Pour finir, nous allons voir l’usage d’un paramètre assez peu connu et pourtant bien pratique : SuspendWhenReadyToComplete.

Lors d’un déplacement de boite aux lettre avec la commande New-MoveRequest, le contenu de la boite est copiée message par message depuis sa base d’origine vers la base de destination. Ce n’est qu’une fois la copie effectuée sans erreurs que les attributs active directory de la boite aux lettres sont modifiées pour refléter le changement de base de données.

Que diriez vous s’il était possible de suspendre le déplacement une fois la copie de la boite aux lettres effectuée. Mieux encore, que diriez vous si cette copie pouvait être maintenue synchronisée avec l’originale pendant 1 mois entier. Vous auriez donc la possibilité de finaliser le déplacement à tout moment et cela ne prendrait que quelques secondes puisque la copie a déjà été effectuée. Eh bien, c’est exactement ce que l’attribut SuspendWhenReadyToComplete permet de réaliser.

Get-Mailbox -Database "Old-Database" | New-MoveRequest -TargetDatabase "DB01" -BatchName "Moving Mailbox from Old-Database" -BadItemLimit 100 -AcceptLargeDataLoss -SuspendWhenReadyToComplete

Vous pourrez alors à tout moment finaliser le déplacement avec la commande Resume-MoveRequest.

Get-MoveRequest | ?{$_.Status -Eq "AutoSuspended"} | Resume-MoveRequest

Dans la deuxième partie de cet article, nous verrons comme suivre en direct le déplacement de boites aux lettres initié par New-MoveRequest et générer des rapports détaillés sur les déplacements réalisés.

A très bientôt.

PS :

Par défaut, le service de réplication de boites aux lettres, n’autorise le déplacement que de deux (02) boites aux lettres à la fois. Pour augmenter ce nombre, et autoriser le déplacement de 20 boites simultanément par exemple, procédez comme suit :

  • Sur vos serveurs CAS, ouvrez le fichier C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeMailboxReplication.exe.config avec le Bloc Note (exécuté en tant qu’administrateur)
  • Modifier les lignes suivantes :
    • MaxActiveMovesPerSourceMDB = “20” (valeur par défaut : 5)
    • MaxActiveMovesPerTargetMDB = “20″ (valeur par défaut : 2)
    • MaxActiveMovesPerTargetServer = “20” (valeur par défaut : 5)

Enregistrez les modifications puis redémarrez le service de réplication de boites aux lettres :

restart-service MSExchangeMailboxReplication -Force

That’s it

Publicités
Catégories :Exchange, Powershell, Scripts Étiquettes : ,
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :