Scenario: You want to recreate an Exchange Database in order to reclaim the Windows space that the database was utilizing. You have already moved all mailboxes off of the database.
Script: This script performs the following:
- Checks to make sure no mailboxes reside on the database
- Removes All Database Copies
- Removes the Databases from the folder directories ( You may have to edit this)
- Creates the Database and sets the quotas to unlimited
- Creates the Database Copies
- Resolves any errors if the database copies are not healthy.
#Set DB Variable $DB = "DB01" #Sets ADServerSettings to see all Arbiratrion mailboxes Set-ADServerSettings -ViewEntireForest $true #Check for any mailboxes on the database $1 = (get-mailbox -database $DB).count $1 += (get-mailbox -database $DB -arbitration).count $1 += (Get-mailbox -database $DB -archive).count $1 += (Get-mailbox -database $DB -publicfolder).count If ($1 -gt 0){ "Mailboxes still exist on this database. Please remove all mailboxes and run this script again." } Else { "Starting the Database Recreation Process" "Determining Activation Preference" #Gathers the Copies $AP = Get-MailboxDatabaseCopyStatus $DB | Sort ActivationPreference | Select -expandproperty Mailboxserver $firstServer = $AP | Select -first 1 $OthServers = Get-MailboxDatabaseCopyStatus $DB | Where ActivationPreference -ne 1 | Sort ActivationPreference | Select -ExpandProperty MailboxServer Write-Host "The Database is hosted on these 4 copies: $AP" #Remove all Mailbox Database copies from each server Write-Host "Removing Database Copies" get-mailboxdatabasecopystatus $DB | Where status -notlike *Mount* | Remove-mailboxdatabasecopy -confirm:$false remove-mailboxdatabase $DB -confirm:$false Write-Host "Sleeping 10 minutes for all processes to become unlocked" Sleep 600 Write-Host "Deleting Folder structure on all copies" #Delete Folder Structure $AP | %{Remove-Item \$_c$$DBDB -force -recurse } $AP | %{Remove-Item \$_c$$DBLogs -force -recurse } #Create the DB Write-Host "Creating $db" New-MailboxDatabase $db -EDBFilePath C:$dbDB$db.edb -LogFolderPath C:$dbLogs -Server $firstserver #Wait for replication Write-Host "Sleeping 3 minutes for replication" Sleep 180 #Mount the Database Write-Host "Mounting $db" Mount-Database $db #Wait for additional replication Write-Host "Sleeping 3 minutes for replication" Sleep 180 #Setting the DB Quotas Write-Host "Setting DB Quotas to unlimited" Set-MailboxDatabase $db -ProhibitSendReceiveQuota Unlimited -ProhibitSendQuota Unlimited -IssueWarningQuota Unlimited #Create the additional Database Copies $OthServers | %{ Write-Host "Creating DB copy for $DB on $_" Add-MailboxDatabaseCopy $db -MailboxServer $_ } #Resumes the DB Copies if they are not currently healthy get-mailboxdatabasecopystatus $DB | Where status -notlike "Mounted" | Resume-mailboxdatabasecopy }