Manage ActiveSync Devices

Hallo Zusammen,

Beim Risk and Health Assessment Program for Exchange Server  (ExRAP) wurde bemängelt, dass ich auf der ActiveSync Mailbox Policy die Option "Allow Non Provisionable Devices" aktiviert habe.

Als Solution habe ich nun eine zweite ActiveSync Mailbox Policy erstellt, welche diese Option aktiv hat, in der Default Policy ist die Option jedoch deaktiviert.

Es wäre auch möglich die ActiveSync Device Access Rules anzuwenden.

Aber zuerst mal zu den Basics...

Ich kann mir die Active Sync Devices welche eine Partnerschaft mit einer Mailbox haben, mit folgendem Befehl anzeigen lassen.

Get-ActiveSyncDevice -Mailbox a.bohren | fl deviceOS, deviceType, DeviceModel,FriendlyName

Auf dem Konto sind mehrere ActiveSync Devices, ich lasse mir mal alle Details von einem Device anzeigen.

Get-ActiveSyncDevice -Mailbox a.bohren | where {$_.FriendlyName -eq "HTC One X"}

Mit dem Get-ActiveSyncDeviceStatistics Befehl sieht man beispielsweise, wann der letzte Sync war und ob die Active Sync Policy angewendet werden konnte.

Get-ActiveSyncDeviceStatistics -Mailbox a.bohren | ft DeviceType,DeviceModel,LastSuccessSync,DevicePolicyApplicationStatus,Status -AutoSize

Schauen wir uns mal alle Details für ein ActiveSync Device an.

Werte für DevicePolicyApplicationStatus sind:

  • AppliedInFull
  • ExternallyManaged
  • NotApplied
  • PartiallyApplied
  • Unknown

Get-ActiveSyncDeviceStatistics -Mailbox a.bohren | where {$_.DeviceFriendlyName -eq "HTC One X"} | fl

Die Active Sync Devices kann man auch in der Konsole anschauen.

Das sieht dann so aus

In der Default Policy habe ich den die Option "AllowNonProvisonableDevices" deaktiviert.

Nun erstelle ich eine neue ActiveSync Policy wo die Option NonProvisionableDevices aktiv ist.

New-ActiveSyncMailboxPolicy -Name NonProvisionableDevice -AllowNonProvisionableDevices $True -DevicePasswordEnabled $True -AllowSimpleDevicePassword $False -MinDevicePasswordLength 4

Get-ActiveSyncMailboxPolicy -Identity NonProvisionableDevice

Voila, die zweite ActiveSync Policy ist nun aktiv.

Und so sehen die Settings der "NonProvisionableDevice" Policy aus

Die Active Sync Policy kann auf jeder Mailbox gesetzt werden, und zwar in der Registerkarte "Mailbox Features" unter "Exchange ActiveSync"

Das ganze kann natürlich auch über die Exchange Management Shell abgefragt und gesetzt werden.

Get-CASMailbox -Identity a.bohren | fl ActiveSyncMail*

Set-CASMailbox -Identity a.bohren -ActiveSyncMailboxPolicy "NonProvisionableDevice"

Mit dem "Remove-ActiveSyncDevice" Befehl kann ein ActiveSync Device entfernt werden.

Get-ActiveSyncDevice -Mailbox a.bohren | where {$_.DeviceType -eq "TestActiveSyncConnectivity"} | fl deviceOS,deviceType, DeviceModel,FriendlyName
Get-ActiveSyncDevice -Mailbox a.bohren | where {$_.DeviceType -eq "TestActiveSyncConnectivity"} | Remove-ActiveSyncDevice

Ich habe nun ein Script entwickelt, welches alte Active Sync Devices entfernt und bestehende Devices aufgrund des DevicePolicyApplicationStatus die entsprechende Active Sync Policy  anwendet.

###############################################################################
# Manage ActiveSync Policy
# - Remove old ActiveSync Devices (LastSuccessSync < ReferenceDate)
# - Set ActiveSync Policy to "NonProvisionableDevice"
#   if DevicePolicyApplicationStatus is not "AppliedInFull"
# Version 1.0 / 11.01.2013
# Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch
###############################################################################

#Set ReferenceDate
[Datetime]$Date = (Get-Date).addDays(-30)
$ReferenceDate = $Date -f "dd.MM.yyyy HH:mm:ss"
$LogPath = (Split-Path -Parent $MyInvocation.MyCommand.Path) + "\ManageActiveSyncDevice.log"
Write-Host "LogPath: " $LogPath


###############################################################################
# Function WriteLog
###############################################################################
Function WriteLog {
 PARAM (
 [string]$pLogtext
 )
  $pDate =  $(get-date -format "dd.MM.yyyy HH:mm:ss")

  $sw = new-object system.IO.StreamWriter($LogPath, 1)
  $sw.writeline($pDate + " " + $pLogtext)
  $sw.close()
}

$ActualDate = $(get-date -format "dd.MM.yyyy HH:mm:ss")
WriteLog ("###############################################################################")
WriteLog ("# Starting Script" + $ActualDate)
WriteLog ("###############################################################################")

#Get All Mailboxes
$CASMailboxes = Get-CASMailbox -ResultSize Unlimited | Where {$_.HasActiveSyncDevicePartnership -eq $true}

#Iterate through the Mailboxes
Foreach ($mbx in $CASMailboxes)
{
 Write-Host "Mailbox: " $mbx.name -ForegroundColor Cyan
 $NonFullyCompliant = $False
 
 $EASDevices = Get-ActiveSyncDeviceStatistics -Mailbox $mbx.name
  Foreach ($EASStat in $EASDevices)
  {
   If ($EASStat.LastSuccessSync -lt $ReferenceDate -AND $EASStat.LastSuccessSync -ne $NULL)
   {
    #LastSuccessSync older than ReferenceDate --> Delete Device
    Write-Host "Delete ActiveSyncDevice" -ForeGroundColor Magenta
    WriteLog ("Delete ActiveSyncDevice: " + $mbx.name)
    WriteLog ("Identity: " + $EASStat.Identity)
    WriteLog ("Identity: " + $EASStat.DeviceType)
    WriteLog ("Identity: " + $EASStat.DeviceModel)
    WriteLog ("Identity: " + $EASStat.LastSyncAttemptTime)
    WriteLog ("Identity: " + $EASStat.LastSuccessSync)
    WriteLog ("Identity: " + $EASStat.Status)
    WriteLog ("Identity: " + $EASStat.DevicePolicyApplicationStatus)
    $EASStat | fl Identity,DeviceType,DeviceModel,LastSyncAttemptTime,LastSuccessSync,Status, DevicePolicyApplicationStatus
    $EASStat | Get-ActiveSyncDevice | Remove-ActiveSyncDevice -Confirm:$false -WhatIf
   } else {
    If ($EASStat.DevicePolicyApplicationStatus -ne "AppliedInFull" -AND $EASStat.DevicePolicyApplicationStatus -ne $NULL)
    {
     $NonFullyCompliant = $True
    }
   }
  }

 If ($NonFullyCompliant -eq $True)
 {
  If ($mbx.ActiveSyncMailboxPolicy -ne "NonProvisionableDevice")
  {
   #Move Device To "NonProvisionableDevice" ActiveSyncPolicy
   Write-Host "Move to Policy <NonProvisionableDevice>: " $mbx.name
   WriteLog ("Move to Policy <NonProvisionableDevice>: " + $mbx.name)
   Set-CasMailbox -ActiveSyncMailboxPolicy 'NonProvisionableDevice' -Identity $mbx.name | Out-Null
  }
 } else {
  If ($mbx.ActiveSyncMailboxPolicy -ne "Default")
  {
   #Move Device To "Default" ActiveSyncPolicy
   Write-Host "Move to Policy <Default>: " $mbx.name
   WriteLog ("Move to Policy <Default>: " + $mbx.name)
   Set-CasMailbox -ActiveSyncMailboxPolicy 'Default' -Identity $mbx.name | Out-Null
  }
 }
}

$ActualDate = $(get-date -format "dd.MM.yyyy HH:mm:ss")
WriteLog ("###############################################################################")
WriteLog ("# Finished Script" + $ActualDate)
WriteLog ("###############################################################################")

Hier das Script in Aktion.

Das Logfile sieht dann so aus.

Grüsse
Andres Bohren