Zum Hauptinhalt springen

Nicht migrierbare Postfachordner mit PowerShell identifizieren

Hinweis: Für die PowerShell-Integration ist ein ShareGate Migrate Pro- oder Enterprise-Abonnement erforderlich. Sie ist im Essentials-Plan nicht verfügbar.

Das Skript identifiziert zwei Arten von Postfachordnern, die ShareGate Migrate nicht kopiert:

  • Nicht erkannt: Ordner mit nicht standardmäßigen Containerklassen (wie IPF.Imap oder IPF.SkypeTeams.Message), die ShareGate Migrate nicht erkennen kann. Diese Ordner erscheinen nicht in Ihrem Migrationsbericht.

  • Standardmäßig übersprungen: Bekannte Systemordner, die ShareGate Migrate erkennt, aber nicht kopiert: ConversationHistory, Clutter, SyncIssues, Conflicts, LocalFailures, ServerFailures, RecoverableItemsDeletions und SearchFolders. Diese werden im Migrationsbericht ebenfalls nicht gekennzeichnet.

Führen Sie Get-NonMigratableMailboxFolders.ps1 vor oder nach einer Migration aus, um beide Arten zu identifizieren und mögliche Lücken in der Abdeckung zu bewerten.

Voraussetzungen

  • Windows PowerShell (für optimale Ergebnisse wird die Verwendung der Eingabeaufforderung empfohlen)

  • Zugriff auf das Quellpostfach mit Exchange Online-Berechtigungen

Das Skript ausführen

Kopieren Sie das untenstehende Skript, speichern Sie es als Get-NonMigratableMailboxFolders.ps1 und führen Sie es dann über die Eingabeaufforderung aus.

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
}

Ergebnisse in der Konsole ausgeben:

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

Ergebnisse in eine CSV-Datei exportieren:

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

Die exportierte Datei enthält für jeden Ordner eine Spalte Reason mit dem Wert NotDetected oder SkippedByDesign.

Problembehandlung

Fehler bei der Modulinstallation

Wenn beim Installieren des Moduls ExchangeOnlineManagement durch das Skript ein Fehler auftritt, öffnen Sie das Skript in einem Texteditor und fügen Sie der Zeile Install-Module -AllowClobber hinzu:

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

Dieser Artikel wurde mit künstlicher Intelligenz übersetzt. Bei Unklarheiten konsultieren Sie bitte die englische Originalversion.

Hat dies deine Frage beantwortet?