Localiser des boîtes aux lettres Exchange Server inutilisées à l'aide de code PowerShell

Les boîtes aux lettres Exchange inutilisées non seulement posent un problème de licence, mais constituent également une faille de sécurité. Repérez les boîtes aux lettres vides et inactives avec PowerShell.

Les licences Exchange Server dépendent du nombre de boîtes aux lettres dans une organisation. Non seulement les boîtes aux lettres Exchange inutilisées monopolisent des licences qui seraient utiles ailleurs, mais les comptes Active Directory inactifs affaiblissent la sécurité d'une organisation. Exchange ne comporte pas d'option native permettant de dresser une liste des boîtes aux lettres inutilisées, mais PowerShell peut s'en charger.

Déterminer la taille des boîtes aux lettres Exchange via PowerShell

Avant de rechercher les boîtes aux lettres Exchange inutilisées, commencez par examiner la taille des boîtes aux lettres à l'aide de PowerShell. Il existe plusieurs façons de le faire, mais personnellement je préfère la commande suivante :

Get-Mailbox | Get-MailboxStatistics | where {$_.ObjectClass –eq “Mailbox”} | Sort-Object ItemCount –Descending | ft DisplayName, TotalItemSize, ItemCount

Cette commande crée un rapport qui indique le nom d'affichage de chaque boîte aux lettres Exchange, sa taille totale (en Ko) et le nombre d'éléments qu'elle contient. La liste est triée dans l'ordre décroissant du nombre d'éléments. J'ai procédé ainsi parce que souvent la liste complète ne tient pas à l'écran. Ainsi, les boîtes aux lettres comportant le moins d'éléments figurent en fin de liste.

Malheureusement, les boîtes vides ne se retrouvent pas toujours en bas. En effet, une boîte aux lettres Exchange qui n'a jamais été utilisée n'est pas listée. Mais cela ne veut pas dire que la boîte aux lettres est absente du rapport. La sortie de la commande indique si une boîte aux lettres n'a encore jamais servi. La figure 1 montre ce message et la sortie complète de la commande.

Figure 1 Figure 1.La sortie du code PowerShell indique si une boîte aux lettres Exchange n'a jamais été utilisée.

Dans mon exemple, la sortie entière tient à l'écran car je n'ai pas beaucoup de boîtes aux lettres. Dans la plupart des organisations, elle est trop longue pour figurer en entier à l'écran.

Dans ce cas, il suffit de diriger la sortie vers un fichier texte à l'aide du cmdlet Out-File de PowerShell. Ajoutez une barre verticale à la fin de la commande ci-dessus, puis entrez Out-File, suivi du chemin d'accès et du nom de fichier voulus. La commande complète se présente comme suit :

 Get-Mailbox | Get-MailboxStatistics | where {$_.ObjectClass –eq “Mailbox”} | Sort-Object ItemCount –Descending | ft DisplayName, TotalItemSize, ItemCount | Out-File C:\rapport.txt

Vous recevrez un avertissement par boîte aux lettres inutilisée. Ces avertissements seront plus faciles à lire car le rapport ne défile pas en entier : seuls les avertissements apparaissent.

Ouvrez le rapport dans Bloc-notes ou entrez la commande Type, suivie du nom du fichier. La figure 2 montre la commande entière, l'avertissement qui est apparu à l'écran et le contenu du fichier de rapport.

Figure 2 Figure 2. Le rapport sur les boîtes aux lettres Exchange est écrit dans un fichier texte.

Déterminer la date de la dernière connexion pour afficher les boîtes aux lettres Exchange inactives

La méthode que je viens de décrire permet d'afficher les boîtes aux lettres Exchange qui sont vides ou n'ont jamais été utilisées. Mais comment trouver les boîtes aux lettres qui contiennent des données, mais ne sont plus actives ? La solution dans ce cas consiste à déterminer quand le propriétaire de la boîte aux lettres s'est connecté pour la dernière fois.

 

Remarque : Cette technique fonctionne pour les boîtes aux lettres d'utilisateurs, mais pas pour les boîtes aux lettres de ressources Exchange.

Malheureusement, PowerShell ne fournit pas de cmdlet unique pour retrouver les informations de dernière connexion de chaque utilisateur ; vous devez assembler un script PowerShell. Voici un bloc de code simple provenant de chez Automon.com qui détermine la connexion la plus récente de chaque utilisateur :

 $SearchAD = New-Object DirectoryServices.DirectorySearcher([adsi]"") $SearchAD.filter = "(objectclass=user)" $users = $SearchAD.findall() Foreach($user in $users) { if($user.properties.item("lastLogon") -ne 0) { $a = [datetime]::FromFileTime([int64]::Parse($user.properties.item("lastLogon"))) "$($user.properties.item(`"name`")) $a" } }

La figure 3 représente une sortie de ce script.

Figure 3 Figure 3. La sortie du code affiche la date de dernière connexion pour chaque boîte aux lettres Exchange.

Le bloc de code n'est pas parfait, mais il indique efficacement aussi bien les comptes d'utilisateur que les comptes d'ordinateur. Le plus important est que les dates de connexion des utilisateurs ne sont pas répliquées entre contrôleurs de domaine.

Si vous avez plusieurs contrôleurs, il vous faut un script plus élaboré, capable d'effectuer une analyse syntaxique sur chaque contrôleur du domaine.

 

L'AUTEUR :

Brien Posey, qui s'est vu décerner huit fois le titre de MVP (Most Valuable Professional) par Microsoft, possède vingt ans d'expérience en informatique. Avant de devenir rédacteur technique indépendant, Brien était directeur des services informatiques dans un réseau d'hôpitaux et d'établissements de santé aux États-Unis. Il a également officié comme administrateur réseau pour certaines des plus grandes compagnies d'assurance du pays, ainsi que pour le ministère de la Défense à Fort Knox.

Pour approfondir sur Outils collaboratifs (messagerie, visio, communication unifiée)