Maintain control of your Microsoft 365 data
Post Reply
robotrobot94
Lurker
Posts: 2
Liked: 1 time
Joined: Jul 22, 2025 2:23 pm
Contact:

[Request] How to export bulk mailboxes to individual psts simultaneously through Powershell

Post by robotrobot94 »

Hello,

I've been looking through the forums/google to find a way to export bulk mailboxes to individual psts simultaneously. I've found multiple older threads on exporting these sequentially, but nothing at the same time. If anyone has any insight or code they can provide that I can use as a base, that would be great.

If anyone needs a script for doing this sequentially, the script is below.

Code: Select all


# Import Modules for Veeam interaction

Import-Module Veeam.Archiver.PowerShell
Import-Module Veeam.Exchange.PowerShell



# Starting Restore Session with latest Restore Point

$organization = Get-VBOOrganization -Name "ORG Name"
Start-VBOExchangeItemRestoreSession -LatestState -Organization $organization



# Starting the PST Export for all users in the csv

$session = Get-VBOExchangeItemRestoreSession
$database = Get-VEXDatabase -Session $session
$Mailboxes = Import-Csv C:\temp\mailboxes.csv 

# Function to sanitize file names
function Sanitize-FileName($name) {
    return ($name -replace '[\\/:*?"<>|,]', '').Trim()
}
# Loop through each mailbox from your csv file.

ForEach ($mailbox in $Mailboxes) {
       $user = Get-VEXMailbox -Database $database -Name $mailbox.Name

       $sanitizedName = Sanitize-FileName $mailbox.Name
       Export-VEXItem -Mailbox $user -To "V:\Downloaded PSTs\Test Exports\$sanitizedName.pst"
}
Mildur
Product Manager
Posts: 10722
Liked: 2915 times
Joined: May 13, 2017 4:51 pm
Full Name: Fabian K.
Location: Switzerland
Contact:

Re: [Request] How to export bulk mailboxes to individual psts simultaneously through Powershell

Post by Mildur »

Hi robotrobot94,

I haven't tried it myself, but have you considered using Start-Job to run PowerShell commands in the background?
This should allow your script to continue and start the export for other mailboxes.

Best,
Fabian
Product Management Analyst @ Veeam Software
robotrobot94
Lurker
Posts: 2
Liked: 1 time
Joined: Jul 22, 2025 2:23 pm
Contact:

Re: [Request] How to export bulk mailboxes to individual psts simultaneously through Powershell

Post by robotrobot94 » 1 person likes this post

Hey Mildur,

Thank you for pointing me in the right direction. I'm relatively new to PowerShell and a newbie, so I didn't know much about Start-Job. With that being said, I got the script to work for me!


Below is the script I used, which worked for me.

Code: Select all

# Import Veeam modules in parent session
Import-Module Veeam.Archiver.PowerShell
Import-Module Veeam.Exchange.PowerShell

# Get the organization and start restore session
$organization = Get-VBOOrganization -Name "Org Name"
Start-VBOExchangeItemRestoreSession -LatestState -Organization $organization

# Get restore session and database info
$session = Get-VBOExchangeItemRestoreSession
$database = Get-VEXDatabase -Session $session

# Save database ID (so it can be passed to jobs)
$databaseId = $database.Id.Guid

# Load CSV of mailboxes
$mailboxes = Import-Csv C:\temp\mailboxes.csv

# Create jobs for each export
foreach ($mailbox in $mailboxes) {
    $name = $mailbox.Name
    $sanitizedName = ($name -replace '[\\/:*?"<>|,]', '').Trim()
    $outputPath = "V:\Downloaded PSTs\Test Exports\$sanitizedName.pst"

    Start-Job -ScriptBlock {
        param($orgName, $dbId, $mailboxName, $filePath)

        # Re-import modules in the job context
        Import-Module Veeam.Archiver.PowerShell
        Import-Module Veeam.Exchange.PowerShell

        # Re-establish session
        $org = Get-VBOOrganization -Name $orgName
        Start-VBOExchangeItemRestoreSession -LatestState -Organization $org | Out-Null

        $session = Get-VBOExchangeItemRestoreSession
        $database = Get-VEXDatabase -Session $session | Where-Object { $_.Id.Guid -eq $dbId }
        $user = Get-VEXMailbox -Database $database -Name $mailboxName

        Export-VEXItem -Mailbox $user -To $filePath
    } -ArgumentList $organization.Name, $databaseId, $name, $outputPath
}

# Wait for all jobs to finish and check output
Get-Job | Wait-Job
Get-Job | Receive-Job
Mildur
Product Manager
Posts: 10722
Liked: 2915 times
Joined: May 13, 2017 4:51 pm
Full Name: Fabian K.
Location: Switzerland
Contact:

Re: [Request] How to export bulk mailboxes to individual psts simultaneously through Powershell

Post by Mildur »

You're welcome.
And thank you for sharing your script with our community,

Best,
Fabian
Product Management Analyst @ Veeam Software
Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests