Purge Disconnected Or Soft-Deleted Mailboxes Using Remove-StoreMailbox In Exchange 2010 SP1…

Purging disconnected mailboxes isn’t that straightforward in Exchange 2007 & 2010. You have to run multiple commands to purge the disconnected mailboxes, read more here. The option to remove disconnected mailboxes is still not available in 2010 SP1 Console.

Things have changed slightly in 2010 SP1, atleast in the Exchange Shell world. A new command “Remove-StoreMailbox” has been introduced to purge disconnected or soft-deleted mailboxes (new in 2010 SP1).

Info – When mailboxes are moved from a 2010 SP1 database to any other database, Exchange doesn’t fully delete the mailbox from the source database immediately upon completion of the move. Instead, the mailbox in the source mailbox database is switched to a “soft-deleted” state, known as soft-deleted mailboxes.

Let me explain the command based on my environment. I am disabling the mailbox of Chakka Rajith.

Disable Chakka Mailbox

The mailbox goes into a disconnected state and is visible in “Disconnected Mailboxes” node in the console.

Disconnected mailboxes

As is the case in Exchange 2007 & 2010 RTM, there is no button to remove the disconnected mailboxes in the 2010 SP1 console. We can use the “Remove-StoreMailbox” command to remove it in 2010 SP1. To remove Chakka’s mailbox permanently, I ran the following command

Remove-StoreMailbox –database “DB2” –identity “Chakka Rajith” –MailboxState Disabled

One thing to note is that that “database” parameter is required.

Remove chakka mailbox

Once the command was run, I had to run Get-MailboxDatabase | Clean-MailboxDatabase to refresh my console view. And for sure, the mailbox got deleted permanently.

Disconnected mailboxes

If you want to remove all disconnected mailboxes from a database, run the following command

Get-MailboxStatistics –Database “dbname” | Where-Object {$_.DisconnectReason –eq “Disabled”} | ForEach {Remove-StoreMailbox –Database $_.database –identity $_.mailboxguid –MailboxState Disabled

If you want to remove all soft-deleted mailboxes from a database, run the following command

Get-MailboxStatistics –Database “dbname” | Where-Object {$_.DisconnectReason –eq “Softdeleted”} | ForEach {Remove-StoreMailbox –Database $_.database –identity $_.mailboxguid –MailboxState Softdeleted

We can purge disconnected mailboxes using a one-liner in 2010 SP1. That’s an improvement!

SUBSCRIBE FOR DAILY ARTICLE UPDATES VIA EMAIL
Get the published articles delivered straight to your inbox. Your details will not be passed to any third party company.

Exchange Architect, Blogger, Husband & Dad. I have been in IT for the last 11 years, with Exchange Server becoming the prime area in the last few years. I am active on TechNet forums & Experts Exchange.

View all contributions by

25 comments… add one

  • GoodThings2Life January 25, 2011 at 11:03 pm

    I tried to run your piped commands to remove all disconnected mailboxes, but I received the following error:

    Pipeline not executed because a pipeline is already executing. Pipelines cannot be executed concurrently.

    I am running Exchange 2010 SP1 with Rollup 2. Any thoughts?

    Reply edit
  • Anonymous February 6, 2011 at 5:03 am

    Thnx for your post.

    But i have a problem while purge disconnected mailbox on exhcnage 2010 SP1

    getting mentioned error on power shell:-

    [PS] C:Windowssystem32>Get-DisconnectedMailbox "LOGS" | Remove-DisconnectedMailbox -Confirm:$false
    The term 'Get-DisconnectedMailbox' is not recognized as the name of a cmdlet, function, script file, or operable
    m. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
    At line:1 char:24
    + Get-DisconnectedMailbox < <<< "LOGS" | Remove-DisconnectedMailbox -Confirm:$false
    + CategoryInfo : ObjectNotFound: (Get-DisconnectedMailbox:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    Regards
    Lalit

    Reply edit
  • Rajith Jose Enchiparambil February 6, 2011 at 1:02 pm

    Hi Lalit,

    The command in 2010 SP1 is different. Check my article http://www.howexchangeworks.com/2010/09/purge-disconnected-or-soft-deleted.html

    Reply edit
  • lalit February 7, 2011 at 12:16 pm

    Thnx Rahith for your feedback,

    Above command not working in Exchange 2010 Sp1
    but i have deleted all the disconnected mailbox.

    i did some changes in DB settings & run mentioned command in win shell.

    clean-mailbox -identity "DBNAME"

    Please update full command in a single line

    Regards
    Lalit

    Reply edit
  • Anonymous February 26, 2011 at 6:39 am

    Wow I think without Google Microsoft would fall hard because of the complexity they added to Exchange

    Reply edit
  • Rajith Jose Enchiparambil February 26, 2011 at 11:16 am

    ;)

    Reply edit
  • penetrateit March 18, 2011 at 1:57 pm

    Proper way of deleting/purging disconnected mailboxes on Exchange SP1.

    #Update the databases to show all disconnected mailboxes

    Get-MailboxDatabase | Clean-MailboxDatabase

    #List all disconnected mailboxes in a database and display DisconnectReason if its SoftDeleted or Disabled

    Get-MailboxStatistics -Database "Database-01" | Where-Object {$_.DisconnectDate -Notlike $NULL} | Format-Table DisplayName, DisconnectDate, MailboxGuid, DisconnectReason –Wrap

    #Remove all SoftDeleted disconnected mailboxes from a Database

    $Mailboxes = Get-MailboxStatistics -Database "Database-01" | where {$_.DisconnectReason -eq “SoftDeleted”}
    $Mailboxes | foreach {Remove-StoreMailbox -Database $_.database -Identity $_.mailboxguid -MailboxState SoftDeleted}

    #Remove all Disabled disconnected mailboxes from a Database

    $Mailboxes = Get-MailboxStatistics –Database “Database-01” | Where-Object {$_.DisconnectReason –eq “Disabled”}
    $Mailboxes | ForEach {Remove-StoreMailbox -Database $_.database -Identity $_.mailboxguid -MailboxState Disabled}

    Reply edit
  • Reid May 25, 2011 at 3:41 pm

    Thank you for posting these commands – they worked for me as listed!

    Reply edit
  • Rajith Jose Enchiparambil May 26, 2011 at 8:46 pm

    Thanks Reid.

    Reply edit
  • jim sullivan December 22, 2011 at 4:41 pm

    in the second cmdlet #remove all softdeleted etc

    you are missing hte following statement. Where-Object. you only have where

    Reply edit
  • Eric April 8, 2012 at 2:12 am

    If you had the same issue I had after the local move in Exchange 2010 SP1 and it is not a Disabled mailbox below is the command…

    [PS] C:\Windows\system32>Remove-StoreMailbox -database “Administrators”
    -identity “Alert” -MailboxState SoftDeleted

    Confirm
    Are you sure you want to perform this action?
    Removing mailbox “Alert” on database “Administrators”.
    [Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is “Y”): y

    Now just right click on the the “Disconected Mailbox” under the “Recipiant Configuration” and choose “Refresh” and poof they are now gone.

    Reply edit
  • Alex June 29, 2012 at 8:07 am

    Hello,

    Here my on line script, which i use when i moved out all Databases.

    $Mailboxes = Get-MailboxStatistics -Database Database01 | where {$_.DisconnectReason -eq “SoftDeleted”};$count = $Mailboxes.count; $i=0 ; $Mailboxes | foreach {$i+=1;$per = $i / $count * 100; write-progress -activity ” in Progress” -status “Complete: $i ($per %)” -PercentComplete $per;Remove-StoreMailbox -Database $_.database -Identity $_.mailboxguid -MailboxState SoftDeleted -Confirm:$false}

    its with Progessbar. ;-)

    Alex

    Reply edit
  • Anonymous October 31, 2012 at 4:47 pm

    Thanks Eric and Alex. All commnds work perfect

    Reply edit
  • zaf November 29, 2012 at 8:39 pm

    Thanks.

    Reply edit
  • Paul April 25, 2013 at 11:57 am

    I’ve been looking for hours for those commands. Thanks so much you have made my day :)

    Reply edit

Speak Your Mind…

Website Hits