La société au sein de laquelle je travaille propose un système de messagerie hébergée pour certains de nos clients (un serveur contenant plusieurs systèmes de messagerie). L'une des demandes qui m'a été faite a été est d'obtenir un export de chacun des domaines gérés dans des fichiers séparés, afin de pouvoir envoyer à la demande un état des boites à nos clients.

Pour cela, j'ai du faire une modification de mon précédent script, et ce pour plusieurs raisons :

  • La récupération de l'intégralité des boites mails par get-mailboxstatistics ne renvoie pas les boites n'ayant jamais été ouvertes.
  • Les informations relatives aux domaines gérés ne sont pas disponibles.

Pour une meilleure compréhension de ce script, je vous invite à lire (ou relire) cet article.

Conception du script

Notre serveur de messagerie mutualisé fonctionne sous Exchange 2010. Vous pouvez changer la version du Snappin selon votre configuration, ou vous servir de la détection automatique, comme dans le script précédent.

Nous prendrons donc l'intégralité des boites du serveur (à l'aide de la commande Get-Mailbox -Server $nomduserveur ), et récupérerons en plus pour chacune l'adresse SMTP afin de savoir à quel domaine elle est rattachée (via la propriété ($boite.primarysmtpaddress).domain ).

La commande des domaines acceptés est assez simple à trouver, elle se nomme "Get-Accepteddomain" , elle renvoie une liste de ceux qui y sont autorisés.

Nous allons tout simplement ensuite filtrer les boites dont l'adresse SMTP correspond au domaine à l'aide d'un Where-object! Le restant est juste un export sur un dossier défini par domaine géré!


Script final

Vous pouvez le télécharger sur mon dépot gitea personnel.

Add-PSSnapin Microsoft.Exchange.Management.Powershell.E2010
$domaines = get-accepteddomain
$nomduserveur = ["Entrez le nom de votre serveur"]
$expediteur = ["Adresse expediteur du rapport par mail"]
$destinataire = ["Adresse destinataire du rapport par mail"]
$smtpserver = ["Entrez le nom du serveur smtp qui enverra le mail"]
$boites = Get-Mailbox -Server $nomduserveur
$tableau = @()
$chemin = [Environment]::GetFolderPath("Desktop")
$code = [System.Text.Encoding]::Utf8

foreach ($boite in $boites)
    {
    $statsboite = Get-MailboxStatistics $boite
    $statsboite |ft
    $ajout = New-Object PSObject
    #$domaineboite = get-mailbox $statsboite.displayname
    $domaineboite = ($boite.primarysmtpaddress).domain
    Clear-Variable taille -ErrorAction silentlycontinue
    $taille = $statsboite.TotalItemSize.Value.ToMB()

    if ($taille -ne $null)
        {
        $ajout | Add-Member -MemberType Noteproperty -Name "Nom" -Value $statsboite.displayname
        $ajout | Add-Member -MemberType Noteproperty -Name "Domaine" -Value $domaineboite
        $ajout | Add-Member -MemberType Noteproperty -Name "Taille (en Mb)" -Value $taille
        $tableau += $ajout
        }

    }
    set-location c:\
    $fichiers = @()
    Foreach ($domaine in $domaines)
    {
    $tableauclient = $tableau | Where-Object {$_.domaine -eq $domaine.domainname}
    $tableauclient = $tableauclient |Sort-Object -Property "Taille (en Mb)" -Descending
    if ($tableauclient -ne $null)
        {
        $filename = ($domaine.name) +" " +(get-date).toshortdatestring().replace("/","_")
        $repertoire = ($chemin+"\Export\"+($domaine.name))
        $fichier = ($repertoire+"\"+$filename)+".csv"
        if ((Test-Path $repertoire) -eq $false){ New-Item -ItemType directory -Path $repertoire}

        $tableauclient | Export-csv -encoding UTF8 -Path $fichier -NoTypeInformation -Force -Delimiter ";"
        $date = get-date
        $body = "Export des données le " + $date
        $fichiers += $fichier

        }

    }
    $fichiers = $fichiers  |sort-object
    Send-MailMessage -Subject "Export $date" -Attachments $fichiers -Body $body -Encoding $code -From $expediteur -To $destinataire -SmtpServer $smtpserver

Ajouter un commentaire

Article précédent Article suivant