Q ?
Hopefully something else popped into your mind, not Star Trek – The Next Generation
How about monitoring a message queue?
This will help you monitor specifically Exchange 2013-2016 queue changes (state or message count beyond a value)
Just specify the queue and encapsulate into a monitor
OR… download the MP Fragment here
############################################################
# Test Queues
#Lab environment
#$queue1 = “Submission”
#$queue2 = “Submission2”
$queue1 = “CompanyName365-mail-onmicrosoft-com.mail.protection.outlook.com”
$queue2 = “clustered.testlab.net”
##################################################################
# 1. How to monitor the status of the queues below (when the status is “retry” they need alert)
$SPEvent = ( get-queue | where { $_.NextHopDomain -like “$queue1” } | where { $_.Status -like “Retry” } | measure-object )
$SPEvent2 = ( get-queue | where { $_.NextHopDomain -like “$queue2” } | where { $_.Status -like “Retry” } | measure-object )
#
# 2. To get an alert when a message in any of these queues is stuck for > 5minutes
#
$SPEventStuck = ( get-queue | where { $_.NextHopDomain -like $queue1 } | where { $_.Status -like “Suspended” } | measure-object )
$SPEventStuck2 = ( get-queue | where { $_.NextHopDomain -like $queue2 } | where { $_.Status -like “Suspended” } | measure-object )
# 3. Also need alert and exact count when the message count in the above queue goes beyond 1000
$SPEventMC = ( get-queue | where { $_.NextHopDomain -like $queue1 } | where { $_.MessageCount -gt 1000 } | measure-object )
$MCQ1 = ( get-queue | where { $_.NextHopDomain -like $queue1 } )
$MQ1 = ($MCQ1.MessageCount)
$SPEventMC2 = ( get-queue | where { $_.NextHopDomain -like $queue2 } | where { $_.MessageCount -gt 1000 } | measure-object )
$MCQ2 = ( get-queue | where { $_.NextHopDomain -like $queue2 } )
$MQ2 = ($MCQ2.MessageCount)
Have fun!