Automatiser la création et la mise à disposition des boîtes aux lettres Exchange, étape par étape

Si vous cherchez à récupérer un temps précieux pour le consacrer à des tâches plus importantes, examinez donc ces cmdlets capables d'automatiser la création de boîtes aux lettres et leur mise à la disposition de vos utilisateurs.

Dans de nombreuses entreprises qui utilisent Exchange, l'équipe Active Directory crée des comptes d'utilisateur ; les boîtes aux lettres sont ensuite créées par l'administrateur Exchange. Dans d'autres structures, le même personnel administre à la fois Exchange et Active Directory. Dans les deux cas, il est logique de vouloir automatiser la création des boîtes aux lettres ainsi que leur mise à disposition. Heureusement, l'opération est facile à réaliser en quatre étapes simples et en utilisant l'environnement de ligne de commande Exchange Management Shell.

Étape 1 : Créer un script PowerShell

Courrier

Notre objectif consiste à automatiser intégralement la mise à disposition des boîtes aux lettres. Ce processus peut nécessiter plusieurs commandes. Aussi est-il raisonnable d'utiliser un script PowerShell. À l'aide d'un éditeur de texte ou de script, rédigez un script et nommez-le, par exemple, NouvellesBoitesAuxLettres.ps1. Par ailleurs, assurez-vous que la machine qui exécute le script est bien en mesure d'exécuter les scripts PowerShell. Ne riez pas : j'ai vu des utilisateurs faire cette erreur de nombreuses fois.

Pour commencer, utilisez le cmdlet Get-ExecutionPolicy pour déterminer la configuration actuelle de votre politique d'exécution. Parallèlement, exécutez Get-Help about_Execution_Policies pour découvrir les différentes configurations de politique d'exécution et leur fonctionnement.

Étape 2 : Définir une source de données pour le script

Dans le cas de notre script, ce sont les nouveaux utilisateurs qui constituent la source de données. Si ces utilisateurs existent déjà dans l'annuaire Active Directory, la tâche est simple. L'environnement Exchange Management Shell (EMS) intègre un cmdlet nommé Get-User. Celui-ci contient des capacités de filtrage natives. Prenons la commande suivante :

Get-User -RecipientTypeDetails User -OrganizationalUnit company.local/sales

Cette commande extrait les utilisateurs Active Directory de l'unité organisationnelle (UO) « Sales ». Le paramètre -RecipientTypeDetails a pour valeur « User ». Aussi, il renvoie uniquement les 1 000 premiers utilisateurs de l'UO Sales qui n'ont pas de boîte aux lettres. Vous pouvez également ajouter le paramètre -ResultSize et lui attribuer une valeur spécifique ou la valeur « Unlimited » (illimité).

S'il n'existe aucun utilisateur dans Active Directory, je recommande d'utiliser un fichier au format csv (comma-separated values). Vous pouvez créer des fichiers .csv manuellement au moyen d'un éditeur de texte, mais je recommande tout de même d'utiliser Microsoft Excel.

Créez une feuille de calcul puis ajoutez plusieurs colonnes qui définissent les paramètres de chaque boîte aux lettres. Par exemple, pour créer des utilisateurs Active Directory dotés de boîtes aux lettres, vous devez fournir certaines informations notamment un nom, un alias et un nom principal d’utilisateur, ou UPN (User Principal Name).

Vous pouvez ajouter d’autres paramètres, mais voici déjà ce que à quoi pourrait ressembler un fichier réduit à sa plus simple expression :

Nom

Alias

UPN

Jerald Franklin

jfranklin

JFranklin@company.local

Patti Byrd

pbyrd

PByrd@company.local

Christopher Beasley

cbeasley

CBeasley@company.local

Woodrow Stevenson

wstevenson

WStevenson@company.local

Rappelez-vous que le cmdlet New-Mailbox dispose de plus de 50 paramètres ; cette feuille de calcul peut donc facilement être étendue. Enregistrez la feuille de calcul sous la forme d’un fichier .csv (à valeurs séparées par des virgules), puis importez-le dans l’EMS en utilisant le cmdlet suivant :

Import-CSV c:\new_users.csv -NoTypeInformation

Cette commande renvoie chaque colonne du fichier .csv sous forme d’objet. Chaque objet dispose de trois propriétés : Nom, Alias et UPN. Chaque objet est défini par les noms des colonnes figurant dans le fichier .csv. L’étape suivante consiste à traiter les résultats et à fournir une nouvelle boîte aux lettres à chaque utilisateur.

Étape 3 : Utiliser la source de données pour créer les boîtes aux lettres

Étant donné que la source de données est une liste de comptes d’utilisateur extraits d’Active Directory, vous avez besoin de la commande suivante pour créer les boîtes aux lettres correspondantes :

Get-User -RecipientTypeDetails User -OrganizationalUnit company.local/sales | Enable-Mailbox

La sortie (les comptes d’utilisateur) générée par la première commande est dirigée (commande « pipe », | ) vers le cmdlet Enable-Mailbox, qui à son tour, crée des boîtes aux lettres pour chacun des utilisateurs. Ici encore, il est possible d’ajouter de nombreux paramètres au cmdlet Enable-Mailbox pour définir des éléments de configuration supplémentaires.

Mettre à disposition de nouvelles boîtes aux lettres nécessite souvent plusieurs tâches. La première étape consiste à créer la boîte aux lettres. Toutefois, vous pouvez être amené à l’ajouter à un groupe de distribution ou à exécuter une commande supplémentaire. Étendons un peu notre exemple de code précédent :

Get-User -RecipientTypeDetails User -OrganizationalUnit company.local/sales | %{
  $mb = Enable-Mailbox $_
  Add-DistributionGroupMember -Identity Sales -Member $mb
}

Cette fois, j’ai redirigé (pipeline ; | ) la sortie de Get-User vers le caractère de pourcentage (%). Le caractère de pourcentage constitue un alias du cmdlet Foreach-Object. Vous pouvez ainsi exécuter plusieurs commandes dans un bloc de script (le code entre accolades) pour chaque utilisateur renvoyé.

À l’intérieur du bloc de script, j’exécute deux commandes : l’une pour créer la boîte aux lettres et l’autre pour ajouter celle-ci au groupe de distribution « Sales ». Remarquez que j’ai référencé l’objet d’entrée (l’utilisateur envoyé via le pipeline) au moyen de la variable $_. Il s’agit d’une variable temporaire ; elle vous permet de référencer chaque utilisateur lorsqu’il traverse le pipeline.

Si vous utilisez un fichier .csv, vous pouvez adopter une approche similaire. Vous importez alors le fichier, procédez à une itération sur chaque ligne et créez les comptes d’utilisateur et les boîtes aux lettres. Ici encore, vous pouvez utiliser le cmdlet ForEach-Object pour traiter la collection d’éléments :

Import-CSV c:\new_users.csv –NoTypeInformation | %{
  $password = ConvertTo-SecureString P@ssw0rd –AsPlainText –Force
  $mb = New-Mailbox –Nom $_.Nom –UserPrincipalName $_.UPN –Password $password
  Add-DistributionGroupMember -Identity Sales -Member $mb
}

Le cmdletNew-Mailbox requiert l’affectation d’un mot de passe sous forme d’objet à chaîne sécurisée. Aussi, cette fois, j’ai utilisé trois commandes au sein du bloc de script. La première crée un objet de mot de passe sécurisé initial, la deuxième crée la boîte aux lettres et la troisième ajoute cette dernière au groupe « Sales ».

Remarquez que j’ai à nouveau utilisé la variable $_. Cette fois, j’accède aux propriétés de la variable $_, qui se mettent directement en correspondance avec les en-têtes de colonne du fichier .csv.

Étape 4 : Planifier l’exécution automatique du script

Pour automatiser le script, il suffit d’ajouter une nouvelle tâche planifiée. Assurez-vous que vous exécutez bien PowerShell.exe et que le nouveau script de mise à disposition est spécifié en tant que commande à exécuter. Voici l’exécution par ligne de commande de l’utilitaire schtasks.exe pour créer la tâche :

schtasks /create /tn "Fournir_BoitesAuxLettres" /tr 
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command 
c:\NouvellesBoitesAuxLettres.ps1" /sc daily /st 00:00 /rl highest

Dans cet exemple, j’ai créé une tâche nommée « Fournir_BoitesAuxLettres » qui exécute quotidiennement le script NouvellesBoitesAuxLettres.ps1, à minuit (00:00).

Il peut certes s'avérer plus pratique de gérer les tâches planifiées via le planificateur de tâches graphique, mais la présente commande vous donnera une idée des paramètres que vous devez utiliser. Si vous optez pour le fichier .csv, écrasez-le avec celui qui définit le nouvel ensemble d'utilisateurs, avant que le script ne s'exécute à nouveau le jour suivant.

Parallèlement au contrôle de votre politique d'exécution, vous devez également vous assurer que votre environnement EMS se charge lors de l'exécution du script. Cette vérification intervient au début du script, ou depuis un profil associé au compte d'utilisateur qui exécute la tâche.

 

 

L'AUTEUR

Mike Pfeiffer est détenteur des certifications MCM (Microsoft Certified Master) pour Exchange 2010 et MVP pour Microsoft Exchange. Parallèlement à son travail d'auteur et de conférencier IT, Mike Pfeiffer anime des cours sur Exchange, Lync et PowerShell chez Interface Technical Training, à Phoenix, en Arizona. Vous trouverez bon nombre de ses réflexions en ligne sur son blog mikepfeiffer.net, où il publie régulièrement des billets sur des sujets liés à Exchange Server et PowerShell.

Pour approfondir sur Outils collaboratifs

Close