Scenario: After your frontend client access gateway has crashed a couple of times, you would like to test that your frontend client access gateway continues to work properly for EWS. You would like an EWS script to validate that not only can it login to a mailbox, but it can query for a specific item in the mailbox. If it cannot query for the email item in the mailbox, then you want to be notified.
Script:
- First create a mailbox that you will monitor.
- Send an email to that mailbox so you can query that email by the subject line.
Create your Variables:
#Mailbox Variables $MailboxName = "EWSMonitor@Domain.com #Mailbox to Query $Subject = "EWS Test" #Message to query #Script Variables $cred1 = get-credential #This account has access to the mailbox $Counter = 0 #If you want the counter to stop after # of loops $sleep = 600 #10 minutes $EndLoop = "Run Forever" #Set as value so it stops in a timely manor #Email Variables [string[]]$to = "steve@domain.com","billy@domain.com" $smtp = "mail.domain.com" $from = "EWS_Monitor@domain.com" $subject1 = "EWS FAILURE"
The Looping Script
#Loop############################################# Do{ $miMailItems = $null "Starting Loop" $Counter++ #Connect to EWS Import-Module -Name "C:Program FilesMicrosoftExchange ServerV15BinMicrosoft.Exchange.WebServices.dll" $service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.Exchangeversion]::exchange2013) $service.Url = new-object System.Uri("https://email.domain.com/EWS/Exchange.asmx") $service.UseDefaultCredentials = $false $service.Credentials = $cred1.GetNetworkCredential() #Attach to Inbox $folderidInbox = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName) $InboxFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderidInbox) #Search Filter $Sfsub = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.ItemSchema]::Subject, $Subject) $sfCollection = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection([Microsoft.Exchange.WebServices.Data.LogicalOperator]::And); #Build your Search Collection $sfCollection.add($Sfsub) $view = new-object Microsoft.Exchange.WebServices.Data.ItemView(2000000) $miMailItems = $InboxFolder.FindItems($sfCollection,$view) "Found MailItem in StaciATest = $($MiMailItems.count)" If($MiMailItems.count -NE 1){ "MailItem Count -eq Null, Sending Message" send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject1 -Priority high } "Sleeping $Sleep" Sleep $sleep }While($Counter -ne $EndLoop) #####################################################################################