Sandri_Nenes Sandri_Nenes - 1 month ago 14
Perl Question

WMI query Exchange Server with Perl

I've been using WMI a lot to get information from servers and I've been getting good results
(generic though like processor state, hdd, logged on users, process lists etc )

Now I have a specific task to query some specific data from an Exchange Server 2010
Data like the one you might get from the performance monitor and health check
like Active Mailbox Delivery Queue, send queue size, receive queue size, SMTP Current Connections and the list goes on and on.

Now I've been doing some research and i've found some articles and found that
this class is supposed to have the data I need : root\MicrosoftExchangeV2
I'm having a hard time coding this and I've found some vb examples that I tried to convert in perl modules but nothing seem to work.
Any start up example is appreciated

ps: on the exchange server wmi seems to be not accesable from remote (so i run this locally)


use Win32::OLE('in');
use constant bFlagReturnImmediately => 0x10;
use constant bFlagForwardOnly => 0x20;
#use warnings;

use Win32::OLE::Enum;

my $comp = ".";
my $oWMIService_ = Win32::OLE->GetObject( "winmgmts:impersonationLevel=impersonate}!\\\\$comp\\ROOT\\MicrosoftExchangeV2") or die "problem";
my $colItems_ = $oWMIService_->ExecQuery ( "Select * from Exchange_Link", "WQL", bFlagReturnImmediately | bFlagForwardOnly);

foreach my $objItem_ (in $colItems_){

print $objItem_->{StateRemote};



After digging deep into microsoft's documentation and monitoring wmi i managed to find the specific performance counters as below:

ExchangePop3_MSExchangePop3ConnectionsCurrent => 0
TransportQueues_MSExchangeTransportQueuesLargestDeliveryQueueLength => 0
TransportQueues_MSExchangeTransportQueuesRetryMailboxDeliveryQueueLength => 0
IS_MSExchangeISMailboxActiveClientLogons => 193
TransportQueues_MSExchangeTransportQueuesUnreachableQueueLength => 0
TransportSmtpSend_MSExchangeTransportSmtpSendMessagesSentPerSec => 0
TransportSMTPReceive_MSExchangeTransportSMTPReceiveConnectionsTotal => 190
TransportQueues_MSExchangeTransportQueuesMessagesQueuedForDelivery => 0
TransportQueues_MSExchangeTransportQueuesRetryNonSmtpDeliveryQueueLength => 0
Imap4_MSExchangeImap4CurrentConnections => 0
ActiveSync_MSExchangeActiveSyncRequestsPersec => 0
TransportQueues_MSExchangeTransportQueuesActiveMailboxDeliveryQueueLength => 0
TransportQueues_MSExchangeTransportQueuesSubmissionQueueLength => 0
TransportQueues_MSExchangeTransportQueuesActiveRemoteDeliveryQueueLength => 0
TransportSmtpSend_MSExchangeTransportSmtpSendConnectionsTotal => 92
MailSubmission_MSExchangeMailSubmissionFailedSubmissionsPerSecond => 0
MSExchangeISActiveUserCount => 0
TransportQueues_MSExchangeTransportQueuesActiveNonSmtpDeliveryQueueLength => 0
TransportQueues_MSExchangeTransportQueuesRetryRemoteDeliveryQueueLength => 0
TransportQueues_MSExchangeTransportQueuesAggregateDeliveryQueueLengthAllQueues => 0
OWA_MSExchangeOWAAverageResponseTime => 120
ActiveConnectionCount => 101

I hope somebody might get these useful for any monitoring tool they might be writing to monitor any busy exchange server