19 Jun 2023, 00:00

Exchange online et Powershell

Share

https://docs.microsoft.com/fr-fr/powershell/exchange/connect-to-exchange-online-powershell?view=exchange-ps

Installation

Install-Module ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement

Si les message ModuleNotFound s’affiche, il faut installer ce module. Depuis mars 2020, il faut forcer TLS 1.2 au minimum, pour assurer l’installation correcte des modules et leurs dépendances :
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Si un message disant “L’éxécution de scripts est désactivée sur ce système”, il faut l’activer avec :
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
(à voir s’il est nécessaire de lancer PS en admin pour ça ?)

Connect-ExchangeOnline -UserPrincipalName user@domain.com
Si le nom fourni est un admin, il pourra consulter les statistiques des autres boîtes mail.

Si un message du genre
Impossible de charger le fichier ou l'assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ou une de ses dépendances. Le fichier spécifié est introuvable.
s’affiche, il faut probablement installer une version + récente du framework DotNet (genre 4.8 ?)

Connection RPS (remote PowerShell) dépréciée :
Connect-ExchangeOnline -UseRPSSession

Limite de taille

La sortie de certaines commandes peut être tronquée (avec ...) si la fenêtre n’est pas assez large pour tout afficher, et ce même si on redirige la sortie vers un fichier. Pour avoir les lignes complètes, on peut utiliser | out-string -Width 999999 .

Lister les dossiers d’une boîte mail par ordre de taille

$mailbox = "user@domain.com"
(guillemets obligatoires)

Pour la taille de chaque dossier uniquement, sans les sous-dossiers :
Get-EXOMailboxFolderStatistics $mailbox | Select FolderPath,FolderSize,@{ name="FolderSizeBytes"; expression={((($_.FolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').Replace(',','')) -as [bigint])}}| Sort-Object -Property FolderSizeBytes -Descending | Out-String -Width 999999 | ft

Avec les sous-dossiers :
Get-EXOMailboxFolderStatistics $mailbox | Select FolderPath,FolderAndSubfolderSize,@{ name="FolderAndSubfolderSizeBytes"; expression={((($_.FolderAndSubfolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').Replace(',','')) -as [bigint])}}| Sort-Object -Property FolderAndSubfolderSizeBytes -Descending | Out-String -Width 999999 | ft

On peut le piper vers un fichier : > report.txt

Afficher les infos générales d’une boîte mail

Get-EXOMailboxStatistics $mailbox

Lister les dossiers vides d’une boîte mail

Pour lister les dossiers qui sont vides, y compris les sous-dossiers :
Get-EXOMailboxFolderStatistics $mailbox | Where {$_.ItemsInFolderAndSubfolders -eq 0} | Select Identity | out-string -Width 999999

Uniquement dans un sous-dossier

Get-EXOMailboxFolderStatistics $mailbox | Where {$_.ItemsInFolderAndSubfolders -eq 0 -and $_.FolderPath -Match "/Boîte de réception/Mon sous-dossier" }

| Select FolderPath,FolderID,Identity