diff --git a/Exchange/Export-all-mailboxes.ps1 b/Exchange/Export-all-mailboxes.ps1 new file mode 100644 index 0000000..bd8c464 --- /dev/null +++ b/Exchange/Export-all-mailboxes.ps1 @@ -0,0 +1,36 @@ +$ExportPath = "" #Specify the export path as UNC path! +$Mailboxes = Get-Mailbox -ResultSize Unlimited +$TotalMailboxes = $Mailboxes.Count +$CurrentMailbox = 0 + +foreach ($Mailbox in $Mailboxes) { + $CurrentMailbox++ + + # Start Export Request + New-MailboxExportRequest -Mailbox $Mailbox.Identity -FilePath "$ExportPath\$($Mailbox.Alias).pst" + + Write-Host "Export started for: $($Mailbox.Alias). Waiting for completion..." + + do { + Start-Sleep -Seconds 5 # Wait before checking again + + # Check if the mailbox export is still in progress + $ExportRequest = Get-MailboxExportRequest -Mailbox $Mailbox.Identity | Where-Object { $_.Status -ne "Completed" } + $ExportStats = Get-MailboxExportRequestStatistics -Mailbox $Mailbox.Identity -ErrorAction SilentlyContinue + + # Get completion percentage of the current mailbox export + $MailboxPercentComplete = if ($ExportStats) { $ExportStats.PercentComplete } else { 0 } + + # Calculate overall progress + $OverallPercentComplete = [math]::Round((($CurrentMailbox - 1 + ($MailboxPercentComplete / 100)) / $TotalMailboxes) * 100, 2) + + # Display Progress Bar for Overall Process + Write-Progress -Activity "Exporting Mailboxes" ` + -Status "Processing: $($Mailbox.Alias) ($MailboxPercentComplete% complete)" ` + -PercentComplete $OverallPercentComplete + } while ($ExportRequest) + + Write-Host "Export completed for: $($Mailbox.Alias)" +} + +Write-Host "All mailbox exports completed!"