Exchange est un outil formidable, extrêmement complet et paramétrable au possible. Cependant, les espaces disque nécessaires pour son utilisation peuvent tout simplement exploser si, comme souvent, la limitation de taille de boite mails est placée haut (exemple : 10 Go) et que le nombre d'utilisateurs grimpe.

En arrivant à une saturation d'espace disque, c'est tout simplement le service de messagerie qui ne fonctionne plus, car il n'a plus de possibilité d'étendre ses bases. Lors des premiers signes de diminution drastique d'espace, il est important de savoir qui consomme quoi. Le script suivant vous permettra de connaitre la taille de chaque boite mail.


Conception du Script

Tout d'abord, il est nécessaire de savoir quelle version d'Exchange est installée sur le serveur, en supposant que nous ne le savons pas. Comme le Snappin ajoutant les commandes supplémentaires change de nom en fonction des versions du serveur de messagerie, nous allons déjà faire le nécessaire pour "découvrir" la bonne version. La commande Get-wmiobject Win32_Product renvoie la liste des programmes installés sur le serveur qui lancera le script. Un filtre Where-object permettra de ne renvoyer que le produit Exchange Server.

$versionexchange = Get-WmiObject Win32_Product | Where-object {$_.name -like "Microsoft Exchange Server"}

Les versions d'Exchange sont dans la propriété "Version", et sont toutes immatriculées de manière différente en fonction du type d'Exchange installé.

  • Exchange 2007 => 8.x.xx.x
  • Exchange 2010 => 14.xx.xxxx.xxx
  • Exchange 2013 => 15.xx.xxxx.xx

Le PSSnappin (un fichier binaire, généralement une dll, qui contient de nouvelles commandes Powershell) à un nom propre à chaque version.

Il se nomme :

  • Microsoft.Exchange.Management.Powershell.Admin pour 2007
  • Microsoft.Exchange.Management.PowerShell.E2010 pour 2010
  • Microsoft.Exchange.Management.PowerShell.E2013 pour 2013

Nous allons donc faire un Switch avec le paramètre -wildcard qui permet l'utilisation des caractères génériques, et d'ensuite ajouter le Snappin!

Switch -wildcard ($versionexchange.version)
{
"8*" {$module = "Microsoft.Exchange.Management.Powershell.Admin";break}
"14*"{$module = "Microsoft.Exchange.Management.PowerShell.E2010";break}
"15*"{$module = "Microsoft.Exchange.Management.PowerShell.E2013";break}
}
Add-Pssnappin $module

Les informations sur les tailles des boites sont trouvables dans la commande get-mailboxstatistics. Cette commande répertorie toutes les boites, et en sort des données utiles, dont celle qui nous intéresse pour ce script, la taille!

$serveur = "[Nom de votre serveur exchange]"
$boites = get-mailboxstatistics -server $serveur

Une fois l'ensemble des boites récupérées, il n'y a plus qu'a créer un tableau en ajoutant ligne par ligne les informations qui nous intéressent. Nous passerons ici par une fonction.

function addtab
{
param([string]$nom,[int]$taille)
$add = New-Object PSObject
$add | Add-Member -Name Nom -MemberType Noteproperty -Value $Nom
$add | Add-Member -Name "Taille (Mb)" -MemberType Noteproperty -Value $taille
return $add
}
$ajout = @()
foreach ($box in $boites)
{
$ajout += addtab -nom $box.displayname -taille $box.totalitemsize.value.tomb()
}

Notre tableau crée, il nous suffit maintenant de l'exporter. Pour cela, et pour s'assurer que cela soit "dynamique", nous allons utiliser une commande .net [Environment]::GetFolderPath("Desktop"). Cette commande va renvoyer l'emplacement du bureau pour l'utilisateur actuel, et l'enregistrer dans une variable.

Nous allons définir aussi un nom de fichier dynamique, en ajoutant la date et l'heure de l'extraction, en prenant soin de retirer les caractères qui ne sont pas utilisables dans les noms de fichier ("/" pour la date et ":" pour l'heure) à l'aide de .replace.

Nous allons également trier le tableau par taille de boite, pour qu'il soit plus lisible, et l'exporter au format CSV à l'emplacement donné (ici le bureau)

$chemin = [Environment]::GetFolderPath("Desktop")
$filename = "tailles boites "+(get-date).toshortdatestring().replace("/","_")+" "+(get-date).toshorttimestring().replace(":"," ")
$fichier = ($chemin+"\"+$filename)+".csv"
set-location c:\
$ajout | Sort-Object -Property "Taille (Mb)"-Descending | Export-Csv -Path $fichier -Encoding UTF8 -NoTypeInformation -Delimiter ";"
$ajout |sort-object -property "Taille (Mb)" -descending |fl
Read-Host -Prompt "Fichier exporté sur le bureau!"

Script final

Le fichier est téléchargeable sur mon espace gitea.

$versionexchange = Get-WmiObject Win32_Product | Where-object {$_.name -like "Microsoft Exchange Server"}
$serveur = "[Nom de votre serveur exchange]"
#Versions Exchange renvoyées sur le get-wmiobject Win32_Product
# Exchange 2007 => 8.x.xx.x
# Exchange 2010 => 14.xx.xxxx.xxx
# Exchange 2013 => 15.xx.xxxx.xx
Switch -wildcard ($versionexchange.version)
{
"8*" {$module = "Microsoft.Exchange.Management.Powershell.Admin";break}
"14*"{$module = "Microsoft.Exchange.Management.PowerShell.E2010";break}
"15*"{$module = "Microsoft.Exchange.Management.PowerShell.E2013";break}
}
Write-Warning "Chargement du module Exchange pour Powershell, cela peut prendre quelques secondes!"
Add-PSSnapin $module
$boites = get-mailboxstatistics -server $serveur
function addtab
{
param([string]$nom,[int]$taille)
$add = New-Object PSObject
$add | Add-Member -Name Nom -MemberType Noteproperty -Value $Nom
$add | Add-Member -Name "Taille (Mb)" -MemberType Noteproperty -Value $taille
return $add
}
$ajout = @()
foreach ($box in $boites)
{
$ajout += addtab -nom $box.displayname -taille $box.totalitemsize.value.tomb()
}
$chemin = [Environment]::GetFolderPath("Desktop")
$filename = "tailles boites "+(get-date).toshortdatestring().replace("/","_")+" "+(get-date).toshorttimestring().replace(":"," ")
$fichier = ($chemin+"\"+$filename)+".csv"
set-location c:\
$ajout | Sort-Object -Property "Taille (Mb)"-Descending | Export-Csv -Path $fichier -Encoding UTF8 -NoTypeInformation -Delimiter ";"
$ajout |sort-object -property "Taille (Mb)" -descending |fl
Read-Host -Prompt "Fichier exporté sur le bureau!"

Ajouter un commentaire

Article précédent Article suivant