From 1edc9932a6eddff5f43616d8f8446684ef65d8ad Mon Sep 17 00:00:00 2001 From: Danny de Kooker Date: Wed, 5 Mar 2025 21:54:08 +0100 Subject: [PATCH] initial script --- Exchange/Export-all-mailboxes.ps1 | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Exchange/Export-all-mailboxes.ps1 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!"