Passer au contenu principal

Identifier les dossiers de boîte aux lettres non migrables avec PowerShell

Utilisez un script PowerShell pour trouver les types de dossiers de boîte aux lettres que ShareGate Migrate ne peut pas détecter ou migrer.

Note : L'intégration PowerShell nécessite un abonnement Pro ou Enterprise à ShareGate Migrate. Elle n'est pas disponible avec le plan Essentials.

Le script identifie deux types de dossiers de boîte aux lettres que ShareGate Migrate ne copiera pas :

  • Non détectés — dossiers avec des classes de conteneur non standard (comme IPF.Imap ou IPF.SkypeTeams.Message) que ShareGate Migrate ne peut pas voir. Ces dossiers n'apparaissent pas dans votre rapport de migration.

  • Ignorés par conception — dossiers système bien connus que ShareGate Migrate détecte mais ne copie pas : ConversationHistory, Clutter, SyncIssues, Conflicts, LocalFailures, ServerFailures, RecoverableItemsDeletions et SearchFolders. Ceux-ci ne sont pas non plus signalés dans le rapport de migration.

Exécutez Get-NonMigratableMailboxFolders.ps1 avant ou après une migration pour identifier les deux types et évaluer les éventuels manques de couverture.

Prérequis

  • Windows PowerShell (l'utilisation de l'invite de commandes est recommandée pour de meilleurs résultats)

  • Accès à la boîte aux lettres source avec les autorisations Exchange Online

Exécuter le script

Copiez le script ci-dessous et enregistrez-le sous Get-NonMigratableMailboxFolders.ps1, puis exécutez-le depuis l'invite de commandes.

param(
# Change this to the mailbox you want to scan
[Parameter(Mandatory = $true)]
[string]$Mailbox,

# Optional: provide a file path to also export the results as a CSV
[Parameter(Mandatory = $false)]
[string]$CsvOutputPath
)

$ErrorActionPreference = 'Stop'

$ModuleName = "ExchangeOnlineManagement"
$RequiredVersion = "3.9.0"

$module = Get-Module -ListAvailable -Name $ModuleName | Where-Object { $_.Version -eq [Version]$RequiredVersion }

if (-not $module) {
Install-Module -Name $ModuleName -RequiredVersion $RequiredVersion -Scope CurrentUser -Force
}

Import-Module -Name $ModuleName -RequiredVersion $RequiredVersion -Force

Connect-ExchangeOnline -ShowBanner:$false

try {
Write-Host "Scanning mailbox: $Mailbox" -ForegroundColor Cyan

$folders = Get-MailboxFolderStatistics -Identity $Mailbox |
Select-Object Name, FolderPath, FolderType, ContainerClass

$nonDetectable = @($folders | Where-Object {
$class = $_.ContainerClass
-not (
[string]::IsNullOrEmpty($class) -or
$class -eq 'IPF.Note' -or $class -like 'IPF.Note.*' -or
$class -eq 'IPF.Appointment' -or $class -like 'IPF.Appointment.*' -or
$class -eq 'IPF.Contact' -or $class -like 'IPF.Contact.*' -or
$class -eq 'IPF.Task' -or $class -like 'IPF.Task.*'
)
})

$skippedFolderTypes = @(
'ConversationHistory',
'Clutter',
'SyncIssues',
'Conflicts',
'LocalFailures',
'ServerFailures',
'RecoverableItemsDeletions',
'SearchFolders'
)
$skippedByDesign = @($folders | Where-Object { $skippedFolderTypes -contains $_.FolderType })

if ($nonDetectable.Count -eq 0) {
Write-Host "No non-detectable folders found." -ForegroundColor Green
}
else {
Write-Host "`nFolders that will NOT be detected by ShareGate ($($nonDetectable.Count) found):" -ForegroundColor Yellow
$nonDetectable | Format-Table Name, FolderPath, FolderType, ContainerClass -AutoSize
}

if ($skippedByDesign.Count -eq 0) {
Write-Host "No folders skipped by design found." -ForegroundColor Green
}
else {
Write-Host "`nFolders that ShareGate detects but skips by design ($($skippedByDesign.Count) found):" -ForegroundColor Yellow
$skippedByDesign | Format-Table Name, FolderPath, FolderType, ContainerClass -AutoSize
}

if ($CsvOutputPath) {
$report = @()
$report += $nonDetectable | Select-Object @{ Name = 'Reason'; Expression = { 'NotDetected' } }, Name, FolderPath, FolderType, ContainerClass
$report += $skippedByDesign | Select-Object @{ Name = 'Reason'; Expression = { 'SkippedByDesign' } }, Name, FolderPath, FolderType, ContainerClass
$report | Export-Csv -LiteralPath $CsvOutputPath -NoTypeInformation -Encoding UTF8
Write-Host "Report exported to: $CsvOutputPath" -ForegroundColor Green
}
}
finally {
Disconnect-ExchangeOnline -Confirm:$false
}

Pour afficher les résultats dans la console :

.\Get-NonMigratableMailboxFolders.ps1 -Mailbox "[email protected]"

Pour exporter les résultats dans un fichier CSV :

.\Get-NonMigratableMailboxFolders.ps1 -Mailbox "[email protected]" -CsvOutputPath "C:\Reports\non-migratable-folders.csv"

Le fichier exporté inclut une colonne Reason avec la valeur NotDetected ou SkippedByDesign pour chaque dossier.

Dépannage

Erreur d'installation du module

Si vous voyez une erreur lorsque le script tente d'installer le module ExchangeOnlineManagement, ouvrez le script dans un éditeur de texte et ajoutez -AllowClobber à la ligne Install-Module :

Install-Module -Name $ModuleName -RequiredVersion $RequiredVersion -Scope CurrentUser -Force -AllowClobber


"Cet article a été traduit à l'aide de l'intelligence artificielle. En cas de doute, veuillez vous référer à la version originale en anglais."

Avez-vous trouvé la réponse à votre question ?