samedi 20 mars 2010

Déplacement massif de boite mail avec Exchange 2007 (EMS)

Le déplacement de boite mail sur Exchange 2007 est relativement bien étudié. On peut facilement déplacer une mailbox alors même que celle-ci est ouverte par un client Outlook par exemple. Dans ce cas, l'utilisateur verra apparaître brièvement un petit "Déconnecter/Connecter" dans son client messagerie. Toute fois, je conseille bien évidement de déplacer les mailbox à un moment ou les serveurs et les boites mails sont le moins sollicités (la nuit par exemple, le week-end etc..).
Si comme moi il y'a toujours du monde dans votre entreprise de 8h à 20h, alors peut-etre mieux vaut-il utiliser une tache planifiée pour le déplacement des mailbox.

J'ai écrit là un exemple de script, celui n'est surement pas le seul possible et n'est pas forcement adapté à votre architecture mais cela peu servir de point de départ.
Ce scripts récupère la liste des utilisateurs/mailbox a déplacé et le nom de la database de destination. Attention, dans la mesure du possible utiliser un fichier au format UTF8. Ensuite, il déplace les mailbox et génère un deux fichiers de logs (1 Transcript & 1 fichier maison).

Format du fichier utilisateur :


Prenom,Nom,SamAccountName,Database
Jean,Michemuche,jmichemuche,Groupe Stockage 1\Banque 1

Contenu du script :

$ScriptName = "Move-BulkMailbox"
$ScriptVersion = "1.0"

# Fichier contenant les mailbox a déplacée et l'emplacement de destination
$UsersFile = "C:\FREESHARE\BulkMoveMailbox\users.csv"

$Date = Get-Date -format "yyyyMMdd"

# Démarrage du transcript, tout ce qui se passe sur la console est reporter dans le fichier de log
Start-Transcript -path "$Date-TS.log"

# mise en place de mes logs perso
# récupération du fichier des logs s'il existe
if(! ($Logs = Get-Item "$Date.log")){
$Logs = new-item "$Date.log" -type file -force
}

# début d'écriture dans le fichier des logs
$LogsTime = Get-Date -format "dd/MM/yyyy H:mm:ss"
add-content $Logs "$LogsTime - BEGIN [$ScriptName v$ScriptVersion]"

$LogsTime = Get-Date -format "dd/MM/yyyy H:mm:ss"
add-content $Logs "$LogsTime - Import du fichier mailbox : $UsersFile"
import-csv $UsersFile foreach {
$UserPrenom = $_.Prenom
$UserNom = $_.Nom
$UserSamAccountName = $_.SamAccountName
$UserTargetDatabase = $_.Database
$LogsTime = Get-Date -format "dd/MM/yyyy H:mm:ss"
add-content $Logs "$LogsTime - $UserSamAccountName ($UserPrenom $UserNom)."
$ThisMailbox = Get-Mailbox -identity $UserSamAccountName
if(! $?){
$LogsTime = Get-Date -format "dd/MM/yyyy H:mm:ss"
add-content $Logs "$LogsTime - ERROR :: $UserSamAccountName ($UserPrenom $UserNom) does not exist."
}else{
$UserActualDatabase = $ThisMailbox.Database
add-content $Logs "$LogsTime - Déplacement de la boite mail de $UserActualDatabase vers $UserTargetDatabase"
move-mailbox -identity $UserSamAccountName -TargetDatabase "$UserTargetDatabase" -BadItemLimit 0 -confirm:$false
if(! $?){
$LogsTime = Get-Date -format "dd/MM/yyyy H:mm:ss"
add-content $Logs "$LogsTime - FAILED"
}else{
$LogsTime = Get-Date -format "dd/MM/yyyy H:mm:ss"
add-content $Logs "$LogsTime - SUSSECED"
}
}
}
$LogsTime = Get-Date -format "dd/MM/yyyy H:mm:ss"
add-content $Logs "$LogsTime - END"
Stop-Transcript
Voici le contenu de la tache planifiée :

powershell.exe -PSConsoleFile "C:\Exchange2007\Bin\exshell.psc1" -command ".'C:\FREESHARE\BulkMoveMailbox\Move-bulkmailbox.ps1'"

0 commentaires:

Enregistrer un commentaire