Monitoring Queues and Delivery Issues

Glenn Maxwell 14,186 Reputation points
2026-09-12T00:48:01.06+00:00

Hi All,

I have four Exchange servers in a DAG:

  • exch01.mydomain.com
  • exch02.mydomain.com
  • exch03.mydomain.com
  • exch04.mydomain.com

I have placed exch01.mydomain.com into maintenance mode.

I would like to monitor the Exchange environment to make sure that messages are not piling up in the queues on the remaining servers and to identify any queues that may be experiencing delivery issues or errors.

I am currently using the following PowerShell command:

Get-ExchangeServer | ForEach-Object {
    Get-Queue -Server $_.Name |
    Where-Object {$_.MessageCount -gt 0} |
    Select-Object Server,Identity,DeliveryType,Status,MessageCount,NextHopDomain
}

Would this command be sufficient to identify queue buildup or delivery issues?

Also, could you please suggest a PowerShell command that would specifically help identify queues with errors, such as Retry, Suspended, or other delivery problems, and distinguish them from normal ShadowRedundancy queues?

Exchange | Exchange Server | Management
Exchange | Exchange Server | Management

The administration and maintenance of Microsoft Exchange Server to ensure secure, reliable, and efficient email and collaboration services across an organization.

0 comments No comments

1 answer

Sort by: Oldest
  1. Teddie Dang 1,265 Reputation points Independent Advisor
    2026-09-12T01:53:33.56+00:00

    Hi @Glenn Maxwell

    Your current command is useful for monitoring queues that contain messages, but MessageCount -gt 0 alone does not necessarily indicate a delivery problem. Some queues can contain messages normally, including ShadowRedundancy queues.

    ShadowRedundancy is part of Exchange's transport high-availability mechanism, so the presence of messages in these queues does not by itself indicate a delivery problem. For routine delivery monitoring, I would generally exclude ShadowRedundancy queues when looking for queues that require investigation. However, a continuously growing or persistently backed-up ShadowRedundancy queue may still warrant further investigation.

    For monitoring queues that may require attention, you can specifically check for queues in Retry or Suspended status:

    Get-ExchangeServer | ForEach-Object {
        Get-Queue -Server $_.Name |
        Where-Object {
            $_.Status -in @('Retry','Suspended') -and
            $_.DeliveryType -ne 'ShadowRedundancy'
        } |
        Select-Object Server,Identity,DeliveryType,Status,MessageCount,
            NextHopDomain,LastError,LastRetryTime,NextRetryTime
    }
    

    This gives you the queue status, message count, next-hop destination, and the last error information that can help when investigating queues that are not progressing normally.

    You can read more at Queue filters: Exchange 2013 Help | Microsoft Learn

    You can also use Get-QueueDigest to get an aggregated view of queues across the DAG:

    Get-QueueDigest -Dag DAG01
    

    For example, to identify queues with more than 100 messages:

    Get-QueueDigest -Dag DAG01 -Filter "MessageCount -gt 100"
    

    The value 100 is simply an example threshold, you can adjust it according to the normal message volume in your environment.

    To specifically identify queues in Retry status:

    Get-QueueDigest -Dag DAG01 -Filter "Status -eq 'Retry'"
    

    Reference: Procedures for queues | Microsoft Learn

    I hope this information is helpful.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.