Exchange Activesync Monitor for Specific Devices
Scenario: Monitor specific ActiveSync Devices and report when a device has not made a successful ActiveSync connection for over an hour. Report the time in local time and not Greenwich.
Script: I ran the following Exchange PS script every hour . Depending on your requirements, you may need to manipulate or move the script around.
#Format Date to Greenwich$currentdate = get-date
$currentdate = $currentdate.Addhours(-1)
$currentdate = $currentdate.touniversaltime()
#Pull the devices that have not connected to LastSuccessSync in over an hour
$devices = get-activesyncdevicestatistics DeviceID | Where {$_.LastSuccessSync -lt $currentdate} | Sort LastSuccessSync | Select DeviceID, DeviceOS, deviceFriendlyName, LastSuccessSync, LastSyncAttemptTime, DeviceModel, Identity
#For the device(s) found, format the information
ForEach ($entry in $devices){
$Device = "Device: "+$entry.DeviceFriendlyName
$DeviceOS = "Device OS: "+$entry.DeviceOS
$DeviceLastAttempt = "Last Sync Attempt (EST): "+$entry.LastSyncAttemptTime.ToLocalTime()
$DeviceLastSync = "Last Success Sync (EST): "+$entry.LastSuccessSync.ToLocalTime()
$DeviceModel = "Device Model: "+$entry.DeviceModel
$DeviceIdentity = "DeviceID: "+$entry.Identity
$DeviceIdentity = $DeviceIdentity -replace "Domain/OU/",""
$DeviceIdentity = $DeviceIdentity -replace "/ExchangeActiveSyncDevices/","_"
}
#Email the results if there is a device that has not reported in over 1 hour.
If ($Devices -ne $null){
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = "smtp.domain.com"
$mailmessage.from = ("EASMonitoring@domain.com")
#$mailmessage.To.add("User@domain.com")
$mailmessage.Subject = "Alert: A mobile device has not connected to e-mail in over 60 minutes."
$mailmessage.Body = "The mobile device below has not connected to e-mail in over 60 minutes.
$DeviceIdentity
$Device
$DeviceOS
$DeviceLastAttempt
$DeviceLastSync
"
$smtpclient.Send($mailmessage)
}