A colleague of mine ran into a problem during an Exchange 2003 / migration. When some of the users tried to search their mailboxes, they receive a message saying, "Search results may take a long time to appear because Microsoft Search is unavailable. Results will not include matches in the e-mail body." (See the example above, from OWA)
This will happen to all mailboxes on the same server if the Microsoft Exchange Search Indexer service is stopped, but in this case only some of the mailboxes on the same server were affected.
I tested the same thing on my home server and found the same results. I had migrated all my accounts from my Exchange 2003 server months ago. When I ran the Get-Mailbox Test-ExchangeSearch PowerShell command I found that all my mailboxes except one (a service account) came back as True (enabled).
The bad news is that there's no way to enable Exchange Search for an individual mailbox. However, the following PowerShell command worked for me to correct the problem:
ResetSearchIndex -Force -All
This command will stop the MSExchangeSearch service, remove the entire search database and restart the MSExchangeSearch service. The MSExchangeSearch will immediately begin crawling the database(s) and rebuild the index(s). It took about 3 minutes on my 550MB database in a VM. You can use Perfmon to watch the Full Crawl Mode Status counter in the MSExchange Search Indices performance object to monitor when it's done. The counter value will be 1 while it's rebuilding, 0 when it's done.
Usage for the ResetSearchIndex PowerShell command:
ResetSearchIndex.ps1 [-force] [] ...
-OR-
ResetSearchIndex.ps1 [-force] -all
-OR-
get-mailboxdatabase ResetSearchIndex.ps1 [-force]
Labels: Microsoft Exchange 2007, PowerShell, Search, tip