Search indexer full crawl can take a long time depending on the size of the database. At the mailbox level, the powershell command can be used in verbose mode.
C:\Windows\system32>test-exchangesearch -identity testuser1 -verbose
VERBOSE: [18:34:15.191 GMT] Test-ExchangeSearch : Active Directory session settings for 'Test-ExchangeSearch' are: View
Entire Forest: 'False', Default Scope: 'domain.com', Configuration Domain Controller: 'dc.domain.com',
Preferred Global Catalog: 'dc.domain.com', Preferred Domain Controllers: '{ dc.domain.com }'
VERBOSE: [18:34:15.191 GMT] Test-ExchangeSearch : Runspace context: Executing user:
Domain.com/Admin Accounts/Individual/admin, Executing user organization: ,
Current organization: , RBAC-enabled: Enabled.
VERBOSE: [18:34:15.191 GMT] Test-ExchangeSearch : Beginning processing &
VERBOSE: [18:34:15.191 GMT] Test-ExchangeSearch : Instantiating handler with index 0 for cmdlet extension agent "Admin
Audit Log Agent".
VERBOSE: [18:34:15.238 GMT] Test-ExchangeSearch : Current ScopeSet is: { Recipient Read Scope: {{, }}, Recipient Write
Scopes: {{, }}, Configuration Read Scope: {{, }}, Configuration Write Scope(s): {{, }, }, Exclusive Recipient Scope(s):
{}, Exclusive Configuration Scope(s): {} }
VERBOSE: [18:34:15.238 GMT] Test-ExchangeSearch : Searching objects "testuser1" of type "ADUser" under the root "$null".
VERBOSE: [18:34:15.253 GMT] Test-ExchangeSearch : Previous operation run on domain controller 'dc.domain.com'.
VERBOSE: [18:34:15.253 GMT] Test-ExchangeSearch : Processing object "domain.com/Users/testuser1".
VERBOSE: [18:34:15.316 GMT] Test-ExchangeSearch : Searching objects "MBX06_DB01" of type "MailboxDatabase" under the
root "$null".
VERBOSE: [18:34:15.316 GMT] Test-ExchangeSearch : Previous operation run on domain controller 'dc.domain.com'.
VERBOSE: [18:34:15.316 GMT] Test-ExchangeSearch : Admin Audit Log: Entered Handler:Validate.
VERBOSE: Testing Exchange Search.
VERBOSE: [18:34:15.331 GMT] Test-ExchangeSearch : Resolved current organization: .
VERBOSE: [18:36:16.872 GMT] Test-ExchangeSearch : Getting catalog state for Mailbox Database "MBX_DB01"...
VERBOSE: [18:36:16.872 GMT] Test-ExchangeSearch : Catalog state: Crawling.
VERBOSE: [18:36:16.872 GMT] Test-ExchangeSearch : Getting the indexing state for mailbox "testuser1" ...
VERBOSE: [18:36:16.887 GMT] Test-ExchangeSearch : Mailbox state: NotStarted, Crawl start time: 0001-01-01T00:00:00.
VERBOSE: [18:36:16.887 GMT] Test-ExchangeSearch : Getting the message indexing state...
VERBOSE: [18:36:16.887 GMT] Test-ExchangeSearch : Document state: Queued, state = 0.
VERBOSE: [18:36:16.903 GMT] Test-ExchangeSearch : TimeSinceLastNotificationWasIndexed for MDB MBX06_DB01 is 0 seconds.
The mailbox state will tell if this mailbox has been crawled or not, in this case, the crawl has not yet started for this mailbox.
At the mailbox database level or server level, we can use the performance monitor to monitor the status of the crawl.
Most of the counters can be found under MSExchange Search Indices
Some of the common ones I used are
Full Crawl Mode Status - The Value is 0 when the crawl is completed
Number of backlogged items added to the retry table - if the value is more than 30000 after the crawl is complete, restart the Microsoft Exchange Search indexer service
Number of failed mailboxes - this will tell how many mailboxes failed to be crawled
Number of mailboxes left to crawl - if the crawl is still running, how many mailboxes are left to crawl