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.